2016-09-11 18 views
-3

このコードブロックでは、13行目でcorrectAnswersを1つ増やしました。ただし、if文が壊れた後は、パーセンテージを出力するときに値が1になります。誰か私のコードに間違っていることを教えてもらえますか?ifステートメント以外の変数値

private static void multiplicationTest(int maxNumber, int minNumber) { 
    int i = 1;               

    while(i != 11) {              
     int firstNumber = (minNumber + (int)(Math.random() * ((maxNumber - minNumber) + 1))), secondNumber = (minNumber + (int)(Math.random() * ((maxNumber - minNumber) + 1))); 
     int inputAnswer, answer = (firstNumber * secondNumber); 
     int correctAnswers = 0; 

     System.out.print("Question " + i + ".)\t" + firstNumber + " * " + secondNumber + " = "); 
     inputAnswer = input.nextInt(); 

     if(inputAnswer == answer) { 
      correctAnswers++; 
      System.out.print("\tcorrect\n"); 

     } else { 
      System.out.print("\tincorrect --- " + firstNumber + " * " + secondNumber + " = " + answer + "\n"); 

     } if(i == 10) { 
      System.out.println("\nYou scored " + correctAnswers + " out of 10 - " + (correctAnswers * 10) + "%."); 

     } 

     i++; 
    } 

} 
+1

* "ただし、if文が壊れた後は..." *それはどういう意味ですか? –

+6

また、最後には*間違ったブレースがあります。 '} if(i == 10){'それが自分自身の行に 'if'を開始します。 –

+2

あなたは10回反復しています。それぞれの反復で 'correctAnswers = 0'を設定します。それを0にリセットし続けると、10回の反復で合計カウントをどのように覚えておくと思いますか? – Andreas

答えて

2

while行の前に置きint correctAnswers = 0;

whileループでは、すべての実行で総合スコアをリセットしたままにします。

これは、スコアは1の外に実際にあるたびに意味はなく、10

0

UserF40はあなたの誤りを指摘しています。残りの部分については、私は短いコードレビューを行います。

  1. あなたは、それを行うためにforループを使用することがはるかに簡単である1から10までカウントするwhileループを使用している:for (int i = 1; i < 11; ++i)を。ループを終了する数値でないブール条件がある場合は、whileループを使用します。

  2. お客様の2番目のifは置き忘れられている可能性があります。ループの最後のパスでのみアクションが発生するので、ループが終了した後でアクションを実行することができます。ifは必要ありません。

  3. Javaライブラリを学んでください。あなたはMath.random()は実数には良いが、整数には適していない。ランダムな整数の場合は、整数を直接供給するRandom.nextInt()を使用します。

  4. 1行に複数の宣言を避けてください。これは不要で、混乱する可能性があります。 1行につき1つの宣言が明確になります。

+0

ありがとうございました。 3つ目は、 'Math.random()'を使用します。なぜなら、ある範囲内でランダムな整数を作るためにその線を学習したからです。 'Random.nextInt()'を使って同様の行がある場合、それは同じか異なっていますか? –

+0

'Random.nextInt(int boundary)'は、0(境界を含む)から境界(排他的)までのランダムな整数を返します。 'firstNumber = minNumber + Random.nextInt(maxNumber - minNumber +1);' My "+ 1はmaxNumberが生成される数値の範囲に含まれると仮定します。これは[Javaのマニュアル](http://docs.oracle.com/javase/8/docs/api/index.html)に記載されています。 – rossum

関連する問題