我差不多完成了这个程序,我只是在验证输入时遇到了问题。我需要确保用户仅使用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);
}
}
}
}
答案 0 :(得分:0)
如果我理解了您的问题,您希望在“对话框”窗口中显示警告消息后,该程序不应重复。如果您不希望在显示Dialog窗口后重复该程序,我认为您需要从循环中断开。以下是经过修改的代码:
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);
}
}
答案 1 :(得分: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);
}
}