-1

このプログラムはほぼ完成しましたが、入力の検証に問題があります。Aユーザーが答えとして, B, C,のみを使用していることを確認する必要がありますが、これを行うと、プログラムは最終結果を繰り返し、ウィンドウを表示Dするだけではありません。"Only A, B, C, and D are valid"Exam クラスの 101 行目から 125 行目 (以下の最後のコード セクション) を修正するのに助けが必要です。

エラーはこの部分にあります

public void actionPerformed(ActionEvent e){
String actionCommand = e.getActionCommand();

if (actionCommand.equals("Exit")){
    System.exit(0);
}
else if (actionCommand.equals("Grade")){
    char[] input = new char[20];
    for (int i= 0; i < input.length; i++){

        input[i] = answerTextFields[i].getText().charAt(0);
        input[i] = Character.toUpperCase(input[i]);
    }
      for (int i=0; i<=input.length; i++) {
            if (input[i] < 'A'|| input[i] > 'D') {
               JOptionPane.showMessageDialog(null, "Only A, B, C, and D are valid");
            } 
            else {
    driver.setName(nameTextField.getText());
    driver.report(input);
            }
      }    
}        
}
4

2 に答える 2

0

これを試して:

        String actionCommand = e.getActionCommand();
        boolean checkValidate = true;
        if (actionCommand.equals("Exit")) {
            System.exit(0);
        } else if (actionCommand.equals("Grade")) {
            char[] input = new char[20];
            for (int i = 0; i < input.length; i++) {

                input[i] = answerTextFields[i].getText().charAt(0);
                input[i] = Character.toUpperCase(input[i]);
            }
            for (int i = 0; i <= input.length; i++) {
                if (input[i] < 'A' || input[i] > 'D') {
                    JOptionPane.showMessageDialog(null, "Only A, B, C, and D are valid");
                    checkValidate = false;
                    break;
                }
            }

////////////if the user enter wrong answer , it's no need to print the report , so i make the report out For Loop 

            if (checkValidate) {
                driver.setName(nameTextField.getText());
                driver.report(input);
            }


        }
于 2013-03-23T19:54:41.273 に答える
0

私があなたの質問を理解した場合、ダイアログ ウィンドウに警告メッセージが表示されたら、そのプログラムを繰り返さないでください。ダイアログウィンドウが表示された後にプログラムを繰り返したくない場合は、ループから抜け出す必要があると思います。変更されたコードは次のとおりです。

for (int i=0; i<=input.length; i++) {
        if (input[i] < 'A'|| input[i] > 'D') {
           JOptionPane.showMessageDialog(null, "Only A, B, C, and D are valid");
           break; // Added to break the loop
        } 
        else {
driver.setName(nameTextField.getText());
driver.report(input);
        }
  }    
于 2013-03-23T19:35:37.303 に答える