2017-08-04 2 views
-4

私は素数を見つけるために、このループを作成し、int numは0に初期化されますが、デバッガは常に(正しくないである)1(正しい)と2 をスキップします。なぜこの条件は常に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リターンを配置することが容易になります。

私は0と1が定義されていないことを知っているので、素数探索を0ではなく2で開始しました。

関連する問題