2015-04-04 89 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