Maya - 1 year ago 83

Java Question

The code below gives you a number close to pi when you run the program. It takes the user input for the number of darts you want thrown per trial, and uses that to come up with the number close to pi. I need to make the code run for a specific number of trials, but can't seem to make it work. How do I do this?

`System.out.print("How many darts per trial? ");`

int darts = in.nextInt();

System.out.print("How many trials? ");

int trials = in.nextInt();

//The code below this represents 1 trial

for(int i = 0; i < darts; i++)

{

xInt[i] = (Math.random() * (upper - lower)) + lower;

yInt[i] = (Math.random() * (upper - lower)) + lower;

c2[i] = Math.pow(xInt[i], 2) + Math.pow(yInt[i], 2);

c[i] = Math.sqrt(c2[i]);

if(c[i] <= 1)

{

hits++;

}

}

double answer = 4 * ((double)hits / (double)darts);

System.out.println(answer);

If I added the for-loop for the trials (see below), then it adds up all of the answers and prints the sum

`for(int n = 0; n < trials; n++)`

{

for(int i = 0; i < darts; i++)

{

xInt[i] = (Math.random() * (upper - lower)) + lower;

yInt[i] = (Math.random() * (upper - lower)) + lower;

c2[i] = Math.pow(xInt[i], 2) + Math.pow(yInt[i], 2);

c[i] = Math.sqrt(c2[i]);

if(c[i] <= 1)

hits++;

}

}

double answer = 4 * ((double)hits / (double)darts);

System.out.println(answer);

It should print out something like this when you are finished.

`Trial [1]: pi = 3.11341744`

Trial [2]: pi = 3.04824237

Trial [3]: pi = 3.33281081

Trial [4]: pi = 3.40901039

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

You need to reset the number of hits for each trial by adding a hits=0; right after the trials for loop Furthermore move your calculation and print statement inside the for loop. Like this:

```
for(int n = 0; n < trials; n++)
{
hits=0;
for(int i = 0; i < darts; i++)
{
xInt[i] = (Math.random() * (upper - lower)) + lower;
yInt[i] = (Math.random() * (upper - lower)) + lower;
c2[i] = Math.pow(xInt[i], 2) + Math.pow(yInt[i], 2);
c[i] = Math.sqrt(c2[i]);
if(c[i] <= 1)
hits++;
}
double answer = 4 * ((double)hits / (double)darts);
System.out.println(answer);
}
```

This should fix it if i'm understanding you correctly.

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**