2013-02-15 34 views
0

我的大腦顯然並沒有在所有氣瓶上開火,但我正在開發一個程序來發現一個數字是否是素數。下面的循環工作,但我不明白爲什麼。如果質數(test [k])是5並且i = 3;如果3 * 3大於5,爲什麼循環會繼續?簡單循環查詢

 int [] test = new int[] {15,14,2,3,19,70,7,9,11,12,13,14,21,23,0,107}; 
int test2 = 7; 


for(int k= 0; k <test.length; k++) 
{ 
    boolean IsPrime= true; 
    if(test[k]==2) 
    { 
     System.out.println(test[k] + " is a prime number"); 
     IsPrime = true; 
     continue; 
    } 

    else if (test[k] % 2 == 0) 
    { 
     IsPrime = false; 
     System.out.println(test[k] + " is NOT a prime number"); 
     continue; 
    } 

    else 
     { 
      for(int i = 3; i * i <= test[k]; i+= 2) 
      { 
       System.out.println(i); 
       if(test[k] % i == 0) 
       { 
        IsPrime =false; 
       } 
      } 
       if(IsPrime == true) 
       System.out.println(test[k] + " is a prime number"); 

       else 
       { 
        System.out.println(test[k] + " is NOT a prime number"); 
       } 
     } 
} 

}

+0

你有更多的代碼可以告訴我們嗎? – funerr 2013-02-15 14:32:14

+0

添加完整的代碼 – Calgar99 2013-02-15 14:34:23

+0

是的。我試圖通過從循環中刪除偶數並檢查奇數直到測試號碼的平方根 – Calgar99 2013-02-15 14:45:37

回答

3

循環將無法繼續,它的工作如預期。
讓去儘管代碼與測試[K] = 5:

1) IsPrime = true (Line: 7) 
2) if (test[k] == 2) is false 
3) else if (test[k] % 2 == 0) is false 
4) we are in the else 
4.1) i = 3 
4.2) i*i <= 5 ? false 
4.3) It does not go in the loop! 
4.4) Is Prime == true is true; 
--End-- 

那麼問題出在哪裏?你爲什麼認爲它確實進入循環?

+0

更有效地進行檢查。您的絕對正確。這是我的代碼的佈局。我認爲IsPrime測試包含在循環內而不是外部。謝謝。我以爲我忘記了一些側面的規則。 – Calgar99 2013-02-15 14:52:40

+0

@DiarmuidCampion,沒問題。 – funerr 2013-02-15 14:53:49