2017-08-04 64 views
-4

我創造了這個循環找素數,該int num初始化爲0,但調試總是跳過1 (這是正確的)和2 (這是正確)爲什麼這個if條件總是排除2?

它怎麼會總是跳過2 % 2 == 0

for (int num = 0; num <= 100; num++) { 
    for (int j = 2; j < num; j++) { 
     if (num % j == 0) { 
      System.out.println(num + " is not a prime number."); 
      break; 
     } 
     if (num - j == 1) { 
      System.out.println("PRIME NUMBER FOUND! It's: " + num + "."); 
      myPrimeNumbers.add(num); 
     } 
    } 
} 
+2

'2(j)<2(num)'是'false',這就是爲什麼內部循環沒有執行 –

+0

謝謝,只是需要添加'<=' – kebabjoe

+0

'<='不行,你需要從循環中分別處理'2' –

回答

0

您的代碼的問題在於,在num = 2的情況下,您無法進入添加素數的部分。您選擇使用內循環的最後一次迭代作爲將素數添加到列表的位置,但num = 2時內循環有0次迭代。

我會修改你的程序如下:

package test; 

import java.util.ArrayList; 
import java.util.List; 

public class Test { 

    private static boolean isPrime(int num) { 
     for (int j = 2; j < num; j++) { 
      if (num % j == 0) { 
       return false; 
      } 
     } 
     return true; 
    } 

    public static void main (String [] args) {  
     List<Integer> myPrimeNumbers = new ArrayList<>(); 
     for (int num = 2; num <= 100; num++) { 
      if (isPrime(num)) { 
       System.out.println("PRIME NUMBER FOUND! It's: " + num + "."); 
       myPrimeNumbers.add(num); 
      } 
     } 
    } 
} 

提取黃金考不上的方法可以很容易地放置truefalse回報的,他們是憑直覺正確的位置。

我開始用2而不是0進行素數搜索,因爲我們都知道0和1根據定義沒有素數。