for循环中的错误在不停止的情况下永远运行

时间:2015-04-12 09:31:17

标签: java loops for-loop

基本上,我的代码设置为在飞镖靶上抛出默认的飞镖量(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)));

}

}

3 个答案:

答案 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,后者不断增加。删除此行,它将正常工作。