2014-01-23 22 views
2

这是一个程序,旨在使用Buffons针模拟来估计pi的值。 我在这里遇到的问题是,在方法calcPi中,pi数组的元素在for循环内部的算术方程后继续显示为0。我已经检查过,hitCounter和trial都能正常工作..帮助?阵列元素不工作的算术公式

import java.util.Scanner; 
public class Darts 
{ 
    public static int trials() //User Inputs number of trials 
    { 
     int input; 
     Scanner in = new Scanner(System.in); 

     System.out.print("How many darts/trials? "); 
     input = in.nextInt(); 

     return input; 
    } 

    public static double [] randomX(int trial) // Randomly generates numbers for the x coordinate on the amounts of trials 

    { 
     double [] randNumArrayX = new double[trial]; 
     for(int i = 0; i < trial; i++) 
     { 
      randNumArrayX[i] = Math.random(); 
     } 
     return randNumArrayX; 
    } 

    public static double [] randomY(int trial) // Randomly generates numbers forthe y coordinate on the amounts of trials 
    { 
     double [] randNumArrayY = new double[trial]; 
     for(int i = 0; i < trial; i++) 
     { 
      randNumArrayY[i] = Math.random(); 
     } 
     return randNumArrayY; 
    } 

    public static int [] dartBoard(double [] randx, double [] randy) // determines whether the dark hit the board or not 
    { 
     int [] hitMiss = new int[randx.length]; 
     int [] trials = new int[randx.length]; 

     for(int i = 0; i < randx.length; i++) 
     { 
      if(Math.pow(randx[i] , 2) + Math.pow(randy[i] , 2) <= 1) 
      { 
       hitMiss[i] = 1; 
      } 
      else 
      { 
       hitMiss[i] = 0; 
      } 
     } 
     return hitMiss; 
    } 

    public static double [] calcPi(int [] h) // Calculates pi using randomly generated numbers 
    { 
     int hitCounter = 0; 
     double [] pi = new double[h.length]; 

     for(int i = 0; i < h.length; i++) 
     { 
      if(h[i] == 1) 
      { 
       hitCounter++; 
      } 
      pi[i] = 4*(hitCounter/(i + 1)); 
     } 
     return pi; 
    } 

    public static void print(double [] pi) // prints results 
    { 
     for(int i = 0; i < 10; i++) 
     { 
      System.out.printf("%-7s%2d%-8s%-10.6f%n", "Trial [", i, "]: pi = ", pi[i]); 
     } 
     System.out.println("\t ....."); 
     System.out.printf("%-17s%-10.6f%n", "Estimate of pi = ", pi[pi.length -1]); 
    } 

    public static void main(String [] args) // main method 
    { 
     int t = trials(); 
     double [] x = new double[t]; 
     double [] y = new double[t]; 
     int [] h = new int[t]; 
     double [] p = new double[t]; 
     x = randomX(t); 
     y = randomY(t); 
     h = dartBoard(x , y); 
     p = calcPi(h); 
     print(p); 
    } 
} 

回答

3

您的问题可能是这一行:

pi[i] = 4*(hitCounter/(i + 1));

你正在做一个整数除法和自hitcounter总是比i下它会始终返回0

试试这个

pi[i] = 4*(hitCounter/(i + 1d));

注意1d这将迫使双重划分。

+0

谢谢,它正在工作:D – user3164890

0

这可能是由于整数除法。

尝试

pi[i] = 4 * (hitCounter/(i + 1.0));

1.0文字在Java中的类型为double。基本上,从
这个表达式中的所有其他值都会被提升为两倍。