当计数器达到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");
}
}
答案 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");
}
}