# Calculating Pi

• 03-03-2013, 09:59 PM
Simon4360
Calculating Pi
Hi,

New to the forum! Gotten a bit stuck on a bit of coding i'm doing for a class, wondered if you could help me at all.

The program is supposed to generate two random numbers and input them to the equation X^2+Y^2, this can then used to calculate Pi.
Anyways, the code works and does generate a value close to pi, i am now trying to adapt it so that the user can input the number of random trials so it
reaches a desired accuracy, which is where i run into a problem. If you where to enter 10 trials, then 100, then a thousand it doesn't simple calculate pi for this many trials. The third entry would calculate pi for 1110 trials. Is there anyway i can get it to "forget" the number of trials the user enters at the end of each loop? Here is the code i have so far:
Code:

```import java.io.*; import java.util.Random; class Week5Part4     {         static BufferedReader keyboard = new BufferedReader (new InputStreamReader(System.in));         static PrintWriter screen = new PrintWriter( System.out, true);         static Random value = new Random();         private static double p(double X, double Y)         {             return ((X*X)+(Y*Y));         }         public static void main (String [] args ) throws IOException         {             screen.println("The value of Pi stored in the Math class is " + Math.PI);             screen.println("\n\n");             double sum = 0;             double overflow = 0;             int trials;             double nextX;             double nextY;             do                 {                     screen.println(" Enter the number of trials needed");                     trials = new Integer(keyboard.readLine()).intValue();                     for (int n =0; n<=trials-1; n++)                     {                         nextX = value.nextDouble();                         nextY = value.nextDouble();                         if (p(nextX,nextY)<1) sum++;                         if (p(nextX,nextY)>=1) overflow++;                     }                     screen.println("The value of Pi is " + ((4*sum)/trials) + " calculated by the program");                      screen.println("sum " + sum + " Overflow " + overflow + " Total " + (sum+overflow));                     trials=0;                 }                          while(trials != 1 );         }     }```
Thanks for any help in advance!

PS sorry if this is on the wrong section!
• 03-04-2013, 01:44 PM
Jamil37037
Re: Calculating Pi
Code:

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

Secondly i think do terminate your while loop
Ask user to press 1 to continue or 2 to terminate
On 1 program should simply work
On 2 program should terminate

Coz you are always doing
Code:

```trials=0; }While(trials!=1);```
It will cause program to run infinitely.

Thanks
• 03-04-2013, 01:55 PM
Tolls
Re: Calculating Pi
Print out the value of 'trials' just before the for loop.
I don't spot where it could be adding previous trials values.

Ah, it's not trials that's the problem...you don't reset any of your other variables (sum, overflow, nextX, nextY).
The easiest way to avoid this is to declare your variables in the narrowest scope possible, in this case those 4 should be declared inside the while loop.
• 03-04-2013, 07:22 PM
Simon4360
Re: Calculating Pi
Ahhh Tolls, thank you so much! program works perfectly now. Such a simple solution :)