2015-04-04 51 views
0

我有问题。我正在尝试使用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); 
+6

This - 'i = i * -1'。 – 2015-04-04 01:04:51

+1

当你在一个调试器中通过这个步骤时,你期望'i'能达到'6'吗? – David 2015-04-04 01:09:02

回答

2

因为你修改i你的循环内为负时j大于或等于2,你不能保证循环终止。

实际上,ij >= 2之后的连续迭代中在正数和负数之间连续振荡。

+0

为帮助你们而欢呼。现在明白了 – Kenlucius 2015-04-04 01:11:02

0

因为:

if((j/2)!=0) 
     i = i*-1; 

在那里我将永远小于6比0甚至更低!

+0

实际上,它不会总是小于零。在'j'> = 2之后,它在每次连续迭代中交替出现正数和负数。 – b4hand 2015-04-04 01:21:20

+0

否定唯一的情况是我会比零大一点就是第一次迭代,其中j将是0,然后我会是2但在第一次迭代,我将永远是负的,这意味着总是小于零) – user2422033 2015-04-04 01:44:03

+0

没有。为自己打印出“我”。值是这样的:1,2,-1,2,-1,2 ...... – b4hand 2015-04-04 02:45:50

相关问题