Loop不会检查多个if

时间:2015-10-12 19:03:34

标签: java

当计数器达到100,200,500时,以及当变量达到某个值时,我的程序应运行公式并打印出最终产品。目前它打印出来

  

线程“main”中的异常java.lang.ArithmeticException:/ by zero

我理解的是因为在计数器生效并使变量碰撞之前,它会尝试除以零而导致该变量。当我更改变量时,它会在100处停止并打印出“100处的π值为:0.0”。 这是代码:

int i = 1;
    int counter = 0;
    double pi = 4/((2*i)*(2*i+1)*(2*i+2));
 while(counter <= 100 ){
     i++;
     counter ++;

     if(i==100){
         System.out.println("The value of \u03C0 at 100 is: "+ pi);
     }
     if (i==200){
         System.out.println("The value of \u03C0 at 200 is: " +pi);
     }
     if (i==500){
         System.out.println("The value of \u03C0 at 500 is:"+pi);
     }
     if(pi==3.14159 ){
         System.out.println("The number of iterations to get to 3.14159 is "+counter+". \u03C0 = 3.141599074");
     }
 }   

2 个答案:

答案 0 :(得分:0)

你的逻辑存在一些问题。您是否通过调试器跟踪了代码?如果你查看你的代码,

int i = 1;
    int counter = 0;
    double pi = 4/((2*i)*(2*i+1)*(2*i+2));

while循环实际更改i之前发生一次。将pi移至while循环,以使用新pi更新i。调试器是你的朋友。

调试器将成为您朋友的另一个地方是while循环。按照这一点,看看当您的逻辑接近测试条件时会发生什么。我预测的第一个兴奋点是counter = 99和接下来的几个循环,或不是:)

您可能需要为多个测试考虑一些if-else块,或者也可以使用switch语句进行计数器测试。

答案 1 :(得分:0)

尝试

...
for (counter = 1; counter <= 500; counter++, i++) {
  double pi = (double) 4/((2*i)*(2*i+1)*(2*i+2));
  if (counter % 100 == 0) {
   System.out.println("The value of \u03C0 at " + counter + " is: "+ pi);
  }

  if(pi == 3.14159 ){
     System.out.println("The number of iterations to get to 3.14159 is "+counter+". \u03C0 = 3.141599074");
 }
}