这个无限循环的原因是什么?
我有问题。我正在尝试使用for循环来运行PI近似。以下是我的代码(从主后)。为什么这个循环不会终止?这个无限循环的原因是什么?
System.out.println("Start");
double sum1 = 1.0, sum2 = 1.0;
int j =1;
for(int i=1;i<6;i++)
{
if((j/2)!=0)
i = i*-1;
if(i>5)
{
sum1 += 0;
}
else
{
sum1 += ((double)1.0/(i+2.0));
sum2 += ((double)1.0/(i+2.0));
}
j++;
}
System.out.println("PI 1 = " + 4*sum1);
System.out.println("PI 2 = " + 4*sum2);
因为你修改i
你的循环内为负时j
大于或等于2,你不能保证循环终止。
实际上,i
在j >= 2
之后的连续迭代中在正数和负数之间连续振荡。
为帮助你们而欢呼。现在明白了 – Kenlucius 2015-04-04 01:11:02
因为:
if((j/2)!=0)
i = i*-1;
在那里我将永远小于6比0甚至更低!
实际上,它不会总是小于零。在'j'> = 2之后,它在每次连续迭代中交替出现正数和负数。 – b4hand 2015-04-04 01:21:20
否定唯一的情况是我会比零大一点就是第一次迭代,其中j将是0,然后我会是2但在第一次迭代,我将永远是负的,这意味着总是小于零) – user2422033 2015-04-04 01:44:03
没有。为自己打印出“我”。值是这样的:1,2,-1,2,-1,2 ...... – b4hand 2015-04-04 02:45:50
This - 'i = i * -1'。 – 2015-04-04 01:04:51
当你在一个调试器中通过这个步骤时,你期望'i'能达到'6'吗? – David 2015-04-04 01:09:02