基本上,我的代码设置为在飞镖靶上抛出默认的飞镖量(10,000),这将计算Pi。如果没有输入参数,则会抛出默认的10,000个投掷如果用户输入参数,该参数将是抛出的投掷数。
现在,程序将永远运行for循环,而不会停止。我意识到,由于我的porgram没有停止,for循环没有结束。如何在for循环中编写第二个条件,以及如何初始化上面的numberOfDarts变量,这是一个错误,但我不知道该怎么做。
public class PiEstimator {
public static void main(String[] args) {
int numberOfThrows = 0;
if (args.length == 0) {
numberOfThrows = 10000;
}
if (args.length > 0) {
numberOfThrows = Integer.parseInt(args[0]);
}
if (Integer.parseInt(args[0]) < 0) {
System.out.println("Cannot throw a negative amount of darts");
}
int numberOfHits = 0;
System.out.println("start");
并且for循环是这样写的(循环本身工作正常,我相信错误是在条件范围内。)
for (int i = 0; i < numberOfThrows; i++) {
double x = Math.random();
double y = Math.random();
numberOfThrows++;
if (x*x + y*y <= 1) {
numberOfHits++;
System.out.println(x + " " + y + " in");
}
if (x*x + y*y > 1) {
System.out.println(x + " " + y + " out");
}
}
System.out.println("end");
System.out.println("Darts : " + numberOfThrows + " " + "Hits : " + numberOfHits + " " + "Pi Estimation : " + (4*((double)numberOfHits/(double)numberOfThrows)));
}
}
答案 0 :(得分:3)
删除此
numberOfThrows++;
否则循环不会终止,因为停止条件为i < numberOfThrows
,因此如果numberOfThrows
不断增长,i
将永远不会通过它(至少直到{{1}溢出并变为负面)。
此外,请将您的条件更改为:
numberOfThrows
您只想在知道有输入时检查否定输入。
答案 1 :(得分:2)
问题是你在循环的每次迭代中增加numberOfThrows
,这导致循环是无限的。所以如果
numberOfThrows=1
for (int i = 0; i <numberOfThrows ; i++) {
numberOfThrows++
numberOfThrows++ // if the if condition is also true
//next iteration loop would be
for (int i = 0; i < 3; i++) { // and increases for other iteration causing it infinite
答案 2 :(得分:1)
你正在增加投掷次数:
numberOfThrows ++;
循环永远不会结束,因为它从0变为numberOfThrows
,后者不断增加。删除此行,它将正常工作。