2017-08-04 49 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根据定义没有素数。