# Need help with doing a calculation in Java

David Barry

Ranch Hand

Posts: 85

posted 8 years ago

In this program, I am calculating the value of pi by simulating throwing darts at a dartboard. I have correctly coded the formula that calculates pi, however, as seen in the code, the # of trials is based on user input. If the user enters 10, I need to calculate pi 10 times. However, I am not sure how I am going to calculate pi ten times. Can somebody help with this? Thanks

David Barry

Ranch Hand

Posts: 85

posted 8 years ago

Well, there are a couple of things that need polishing. For example, make sure that all the numbers that need to start from a known value at the beginning of a trial, do so. The variables numberOfX and numberOfY should start at zero for each time you calculate pi, yes? So they should be initialized inside the top of that for loop, not before the loop (as an aside, you really only need one of those variables, right?)

Another issue is with the array piValues. Since you're creating it each time you calculate pi, it can never hold more than one value, so the expression "piValues[trialNumbers]" is going to give you ArrayIndexOutOfBoundsExceptions. I woud just print the simple variable "pi" and do away with the piValues array altogether.

Another issue is with the array piValues. Since you're creating it each time you calculate pi, it can never hold more than one value, so the expression "piValues[trialNumbers]" is going to give you ArrayIndexOutOfBoundsExceptions. I woud just print the simple variable "pi" and do away with the piValues array altogether.

David Barry

Ranch Hand

Posts: 85

posted 8 years ago

Ok. Thanks for the tip. I definitely see where you are going with this (and how I should be going). I see some improvement in the output, however, based on the following code, I get this outputt:

How many times should the darts be thrown in a trial?

123456

Enter the number of trials.

10

Trial 0: pi = 3.140747

Trial 1: pi = 6.280262

Trial 2: pi = 9.422013

Trial 3: pi = 12.563828

Trial 4: pi = 15.706875

Trial 5: pi = 18.848075

Trial 6: pi = 21.988757

Trial 7: pi = 25.134461

Trial 8: pi = 28.282400

Trial 9: pi = 31.424184

This shows some improvement, however, this is definately NOT what I want, and I really don't see what is going on here.

How many times should the darts be thrown in a trial?

123456

Enter the number of trials.

10

Trial 0: pi = 3.140747

Trial 1: pi = 6.280262

Trial 2: pi = 9.422013

Trial 3: pi = 12.563828

Trial 4: pi = 15.706875

Trial 5: pi = 18.848075

Trial 6: pi = 21.988757

Trial 7: pi = 25.134461

Trial 8: pi = 28.282400

Trial 9: pi = 31.424184

This shows some improvement, however, this is definately NOT what I want, and I really don't see what is going on here.

David Barry

Ranch Hand

Posts: 85

David Barry

Ranch Hand

Posts: 85

posted 8 years ago

Ok, I now have all of the correct values for pi. However, I want to calculate the average of all the pi values and print it below the pi values. However, I get this output: How many times should the darts be thrown in a trial?

123456

Enter the number of trials.

10

Trial 0: pi = 3.140260

Estimate of pi = 0.31402604976671855

Trial 1: pi = 3.137474

Estimate of pi = 0.3137474079834111

Trial 2: pi = 3.135303

Estimate of pi = 0.3135303265940902

Trial 3: pi = 3.134169

Estimate of pi = 0.3134169258683256

Trial 4: pi = 3.139483

Estimate of pi = 0.31394828926905133

Trial 5: pi = 3.143339

Estimate of pi = 0.31433385173665107

Trial 6: pi = 3.136632

Estimate of pi = 0.31366316744427164

Trial 7: pi = 3.150564

Estimate of pi = 0.3150563763608087

Trial 8: pi = 3.140131

Estimate of pi = 0.31401308968377395

Trial 9: pi = 3.140909

Estimate of pi = 0.3140908501814411

123456

Enter the number of trials.

10

Trial 0: pi = 3.140260

Estimate of pi = 0.31402604976671855

Trial 1: pi = 3.137474

Estimate of pi = 0.3137474079834111

Trial 2: pi = 3.135303

Estimate of pi = 0.3135303265940902

Trial 3: pi = 3.134169

Estimate of pi = 0.3134169258683256

Trial 4: pi = 3.139483

Estimate of pi = 0.31394828926905133

Trial 5: pi = 3.143339

Estimate of pi = 0.31433385173665107

Trial 6: pi = 3.136632

Estimate of pi = 0.31366316744427164

Trial 7: pi = 3.150564

Estimate of pi = 0.3150563763608087

Trial 8: pi = 3.140131

Estimate of pi = 0.31401308968377395

Trial 9: pi = 3.140909

Estimate of pi = 0.3140908501814411

David Barry

Ranch Hand

Posts: 85

posted 8 years ago

you have answered your own question. you need to get the sum of all the values of pi, and divide that by the number of trials.

Each time through your loop, you calculate pi for that trial then immediately try and calculate the average:this doesn't make any sense. You can't calculate the average until you have all 10 values.

you need to keep a running total of the values of pi, then when you're done with all your trials, divide that total by the number of trials.

alternately, you could keep a running total inside the loop, and divide that by the trial you're on (not the total number) to see your accuracy improve on each iteration.

Each time through your loop, you calculate pi for that trial then immediately try and calculate the average:this doesn't make any sense. You can't calculate the average until you have all 10 values.

you need to keep a running total of the values of pi, then when you're done with all your trials, divide that total by the number of trials.

alternately, you could keep a running total inside the loop, and divide that by the trial you're on (not the total number) to see your accuracy improve on each iteration.

There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors

David Barry

Ranch Hand

Posts: 85

posted 8 years ago

Thanks, Fred. That's just what I was thinking: keeping a running total. However, I am sort of at a lost as to how to do that. Do I need an array? I don't think I can do: pi = 4 * (numberOfHit / drops);

pi++;

I am just trying to figure out what is the right way to keep a running total so I can divide that by the number of trials (which is variable: numberOfTrials).

pi++;

I am just trying to figure out what is the right way to keep a running total so I can divide that by the number of trials (which is variable: numberOfTrials).

posted 8 years ago
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors

An array is used when you need to keep many individual values. for example. you could have an array of hiTemps that keeps all the hi temperatures for 30 days. you can access them all individually by using the array index.

You don't need that (although you could write your program to work with one). All you need is a total - so your last suggestion is correct. Note that you will need to declare it outside of the trials loop, similar to where you declared your pi variable.

You don't need that (although you could write your program to work with one). All you need is a total - so your last suggestion is correct. Note that you will need to declare it outside of the trials loop, similar to where you declared your pi variable.