0

ほとんどの配列を使用してこのコードを記述しようとしています。各質問の後に「正解」または「不正解」を表示し、最後に正解/不正解の合計を取得しようとしています。目標は配列を使用してこれを達成することですが、配列を使用して各質問の後に正しい/間違っているを表示する方法がわかりません。

//Declarations
String rightAnswer[] = { "B", "C", "A" };
String userAnswer[] = new String [3];
String answer;
int counter;
int finalInt = 3;
int index = 0;
int correct = 0;
int incorrect = 0;

// detailedLoop
for(index = 0; index < finalInt; index++) {
    do {
        answer = JOptionPane.showInputDialog("What planet has the largest rings? \n\nA. Neptune \nB. Saturn \nC. Jupiter");
        userAnswer[index] = answer;
    } while(!(answer.equals("A")|| answer.equals("B") || answer.equals("C")));

    index++;
    do {    
        answer = JOptionPane.showInputDialog("What planet has a large redspot? \n\nA. Neptune \nB. Saturn \nC. Jupiter");
        userAnswer[index] = answer; 
    } while(!(answer.equals("A")|| answer.equals("B") || answer.equals("C")));

    index++;
    do {
        answer = JOptionPane.showInputDialog("What planet is farthest from the sun? \n\nA. Neptune \nB. Saturn \nC. Jupiter");
        userAnswer[index] = answer;
    } while(!(answer.equals("A")|| answer.equals("B") || answer.equals("C")));

    if(userAnswer[index].equals(rightAnswer[index])) {
        System.out.println("Correct!");
        correct++;
        index++;
    }
    if(!(userAnswer[index].equals(rightAnswer[index]))) {
        System.out.println("Incorrect. The right answer is " + rightAnswer[index] + ".");
        incorrect++;
        index++;
    }
}
System.out.println("Total correct:" + correct + ". Total incorrect: " + incorrect + ".");

どんな助けでも大歓迎です、ありがとう。

4

5 に答える 5

1

このセクション:

if(userAnswer[index].equals(rightAnswer[index]))
    {
    System.out.println("Correct!");
    correct++;
    index++;
    }
if(!(userAnswer[index].equals(rightAnswer[index])))
    {
    System.out.println("Incorrect. The right answer is " + rightAnswer[index] + ".");
    incorrect++;
    index++;
    }

ある種の for ループに入る必要があります。技術的にはforループにありますが、index自分自身をインクリメントしているため、forループでは効果的ではありません。

次のようなことをすればうまくいくはずです:

int correct = 0;
int incorrect = 0;
for(i = 0; i < 3; i++) {
  if(userAnswer[i].equals(rightAnswer[i])) {
      System.out.println("Correct!");
      correct++;
    }   

  if(!(userAnswer[i].equals(rightAnswer[i]))) {
      System.out.println("Incorrect. The right answer is " + rightAnswer[i] + ".");
      incorrect++;
    }   
}

編集

また、原則として、for ループでカウンター変数をインクリメントしないでください。forループはすでにそれを行っています。iコードで自分自身をインクリメントしなかったことに注意してください。for ループが実行されるたびに、が評価さiれる前にインクリメントされます。i < 3

于 2012-04-09T01:42:50.853 に答える
1

ユーザーの回答を収集した後にインデックスをリセットしていないように見えるため、回答のインデックスが既に 2 であることを確認するブロックに到達した時点で、回答を確認するコードによって配列の最後の要素のみが検査されます。基本的に何が起こっているかは次のとおりです。

  • ループを開始 (インデックスは 0 から始まります)
  • 最初の答えを取得します (現在、インデックスは 1 に等しくなります)
  • 2 番目の答えを取得します (現在、インデックスは 2 に等しくなります)
  • 3 番目の答えを取得します (インデックスは 2 のままです)
  • インデックスの出力結果 (インデックスは 2 のままなので、最後の回答のみが処理されます)
  • インデックスをインクリメントし、ループの先頭に戻ります (インデックスが 3 になり、ループが終了します)

ループの目的は、配列のインデックスを反復処理することですが、回答を収集するたびにインデックスを手動でインクリメントすることにより、意図しない動作を引き起こしています。簡単な修正は、回答をテストするコードを独自のループに分割することです。これにより、インデックスを最初からやり直すことができます。これで問題が解決しない場合は、回答にコードを追加します。

于 2012-04-09T01:45:45.560 に答える
1

受信した回答をループする前に、インデックス値をリセットして 0 に戻すことはありません。したがって、3 つの文字列のみの配列を作成したため、プログラムは 3,4,5 などの存在しない配列スポットにアクセスしようとしていると思います

1 プログラムを変更して、よりユーザーフレンドリーでデバッグしやすくすることは、小文字の回答も受け入れることです。

また、プログラムは、ユーザーがどの質問を間違っているか正しいかをユーザーに通知しません。これを変更すると、プログラム内の問題を理解するのに役立ちます。

于 2012-04-09T01:31:15.497 に答える
1

これはあなたがやろうとしていることかもしれませんが、私は質問を完全には理解していません:

String questions[] = {
    "What planet has the largest rings? \n\nA. Neptune \nB. Saturn \nC. Jupiter",
    "What planet has a large redspot? \n\nA. Neptune \nB. Saturn \nC. Jupiter",
    "What planet is farthest from the sun? \n\nA. Neptune \nB. Saturn \nC. Jupiter"
};
String rightAnswer[] = { "B", "C", "A" };
String answer = null; // the user's answer
for (int i = 0; i < questions.length; i++) {
    do {
        answer = JOptionPane.showInputDialog(questions[i]);
    } while (!(answer.equals("A")|| answer.equals("B") || answer.equals("C")));
    String x = (answer.equals(rightAnswer[i])) ? "correct" : "incorrect.\nThe correct answer was " + rightAnswer[i];
    JOptionPane.showMessageDialog(null, "Your answer was " + x + ".");
}

私のスタイルを許してください。

于 2012-04-09T01:53:43.410 に答える
0

以前のポスターのほとんどがあなたに答えて、(他の答えの中でも)似たようなものをスケッチしたと思います. クリックしたので、これを投稿します。

public class AstroQuiz {

    final public void run () {
        String[] questions = {
            "What planet has the largest rings? \n\nA. Neptune \nB. Saturn \nC. Jupiter",
            "What planet has a large redspot? \n\nA. Neptune \nB. Saturn \nC. Jupiter",
            "What planet is farthest from the sun? \n\nA. Neptune \nB. Saturn \nC. Jupiter"
        }
        String rightAnswers[] = { "B", "C", "A" };
        String validChoices[] = {"A", "B", "C"}

        int i = 0;
        int correct = 0;
        for (String question : questions) {
            String choice = askQuestionAndGetAnswer(question, validChoices);
            if(isCorrectAnswer(rightAnswers, i, choice)) {
                correct++;
                /* display "you got it!" here .. */
            } else {
                /* display "wrong answer!" here ... */
            }
            i++
        }
        System.out.format("Total correct:%d. Total incorrect: %d.\n", correct, questions.length - correct;)
    }

    final private String askQuestionAndGetAnswer(String question, String[] validAnswers) {
        String answer = null;
        boolean haveValidResponse = false;
        while (!haveValidResponse){
            answer = JOptionPane.showInputDialog(question);
            haveValidResponse = isValidResponse(answer, validAnswers)
        }
        return answer;
    }

    final private boolean isValidResponse(String response, String[] validAnswers) {
        for (String s : validAnswers) {
            if(response.equals(s))
                return true;
        }
        return false;
    }

    final private boolean isCorrectAnswer (String[] correctionAnswers, int questionIndex, String answer) {
        return correctionAnswers[questionIndex].equals(answer);     
    }
}
于 2012-04-09T02:16:17.077 に答える