2016-06-30 14 views
-1

これはちょうど100以下の素数を印刷することになっていますが、出力として数字「3」が得られます。私はちょうどJavaを学ぶようになっていますので、すべて私に見えます。私の単純なJavaプログラムで何が問題になっていますか?

public class ClassesAndObjects { 
    public static void main(String[] args) {   
     Prime n = new Prime(); 
     for (int i = 3; i < 100; i++){ 
      n.Number = i; 
      n.factors(); 
     } 
    } 

} 

class Prime{ 
    long Number; 
    long fact; 
    boolean state = true; 

    void factors(){ 
     for (fact = 2; fact < Number; fact++){ 
      if (fact != Number){ 
       if (Number % fact == 0){ 
        state = false; 
        break; 
       } 
      } 
     } 
     if (state == true){ 
      System.out.println(Number); 
     } 

    } 
} 
+0

これは、常にJavaの最悪の素数実装である必要があります。 – Eiko

+0

私はちょうど始まっています。私はまだ何をしているのか分かりません。 –

答えて

0

(I = 3の場合)

​​
0

このようなステートメントを追加します。

if (state == true){ 
     System.out.println(Number); 
    } 

    state = true; //reset the state variable 

ここでは、次の反復のためにtrueに状態変数をリセットしています。

0

さて、あなたは真の状態=を持っていけないあなたはそれ以外の場合は、最初の呼び出しを除き常にfalseですが、各呼び出しの開始時にtrueにブール状態をリセットする必要がありますfactor()メソッドのデフォルトとして使用します。したがって、最初にstate = falseを実行すると(Number = 4のときに発生します)、常にfalseになります。あなたのコードに太字の行を追加するだけでよいです。

void factors(){ 
    **boolean state = true;** 
    for (fact = 2; fact < Number; fact++){ 
     if (fact != Number){ 
      if (Number % fact == 0){ 
       state = false; 
       break; 
      } 
     } 
    } 
    if (state == true){ 
     System.out.println(Number); 
    } 

} 
関連する問題