【发布时间】:2020-02-14 01:18:35
【问题描述】:
我想创建一个测验,如果用户输入(答案变量)不等于“A”、“B”、“C”、“D”或“E”,则给出答案无效的错误消息"然后再次询问该问题以获取新的输入。即使答案等于“A”、“B”、“C”、“D”或“E”,while 循环仍会运行,我无法找出原因。任何帮助将不胜感激。非常感谢。
import javax.swing.JOptionPane;
public class Quiz {
static String ask(String Question) {
String answer = JOptionPane.showInputDialog(Question);
answer = answer.toUpperCase();
while (!answer.equals("A") || !answer.equals("B") || !answer.equals("C") ||
!answer.equals("D") || !answer.equals("E")) {
JOptionPane.showMessageDialog(null,"Invalid answer. Please enter A, B, C, D, or E.");
Quiz.ask(Question);
}
return answer;
}
public static void main(String[] args) {
String question = "What is a user defined blueprint from which objects are created in Java?\n";
question += "A. Method\n";
question += "B. Variable\n";
question += "C. Class\n";
question += "D. Loop\n";
question += "E. Array";
Quiz.ask(question);
}
}
【问题讨论】:
-
answer不能同时是A、B、C、D和E。将OR和逻辑否定结合使用时要小心。旁注:您的ask执行不必要地叠加(而是使用 do-while 循环并在循环中使用JOptionPane.showInputDialog(Question)而不是递归调用Quiz.ask(Question)。 -
您可能希望您的条件为
while(!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D") && !answer.equals("E"))或while(!(answer.equals("A") || answer.equals("B") || answer.equals("C") || answer.equals("D") || answer.equals("E"))) -
您好,感谢您的回复。不过,我不希望答案同时出现。我想这样做,如果它不是 5 个有效答案(“A”、“B”、“C”、“D”或“E”)中的任何一个,我会收到一个无效错误。如果我第一次给出有效答案,第一个建议有效,但如果我第一次输入无效答案,我希望循环在我输入有效答案时停止,但在这种情况下,它仍然反复给我一个无效错误。
-
另外,如果我有任何机会澄清了我正在寻找的内容,即我不想回答全部 5 个并且只是其中一个,您还有其他建议吗?再次感谢您。
-
不要递归调用
Quiz.ask(Question)。使用 do-while 循环
标签: java while-loop infinite-loop