2016-10-07 15 views
0

プログラミングの新機能 あなたがコメントする前に:私は彼らがこれを行うより効率的な方法であり、既に持っていることを理解します。私はちょうどここのプロセスを理解することが私をより良いプログラマにすると思う。 私はクラスで見た擬似コードに従います。私は整数をとり、整数(userinput)までのすべての素数を出力するプログラムを書いた。 これは私が思い付いたものです:私はちょうど私が残りを得るために比較しています値が何を可視化するために、私のコードのさまざまな部分にprint文を/を持っていたヘルプが必要私のプログラム(素数)のロジックエラー/理解出力

//Import Scanner. 
import java.util.Scanner; 

//Create class. 
public class QuestionTwoA2 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Enter an integer:"); //Ask for user input. 

     int userInteger; //Create scanner object and collect user input. 
     Scanner keyboard = new Scanner(System.in); 
     userInteger = keyboard.nextInt(); 

     boolean primeFlag = true; //Condition required for prime number loop. 
     int outer; //I localised these variables outside the loop so that I 
     int inner; //could test output by printing it. 

     //Checks natural numbers in between 2 and userInteger. 
     for (outer = 2; outer < userInteger; outer++) 
     { 


     for (inner = 2; inner < outer; inner++) 
     { 


      if (outer % inner == 0) 
      { 
       primeFlag = false; 
       //System.out.println(outer + " " + inner); 
       break; 

      } 

     } 
     if (primeFlag) //I think this statement causes a logic problem.     
      System.out.println(outer); 
    } 

} 

}

。私の現在の出力は、(任意の整数入力用)です。

Enter an integer: 
9 
2 
3 

は、論理的に私のコードは正常に見えるが、明らかに動作しません、実際にははるかに高く評価されるだろうに何が起こっているかを説明するのに役立ちます。

+0

内部ループの前にprimeFlag = trueを設定します – Nyavro

+0

primeFlagをfalseに設定した後は、その初期値に決して設定しないでください。 – pvg

答えて

0

"boolean primeFlag = true;"とする必要があります。最初のものの中と2番目のものの前に。 2番目の引数は "outer"変数が素数かどうかを検出するためのものです。その前にまずフラグをtrueに設定する必要があります。実際にプライムかどうかを確認し、そうでない場合はフラグを変更してください。

+0

外部のforループ "boolean primeFlag = true"の最初の繰り返しがtrueであるため、常に2が出力されますか? – grant2088

+0

であるか、outer = 2、inner = 2のとき、outerの最初の繰り返しに対して、内部ループの条件が満たされていないため、 "boolean primeFlag = true"ですか? – grant2088

関連する問題