我想创建一个测试,如果用户输入(答案变量)不等于“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);
}
}
3条答案
按热度按时间t98cgbkg1#
非a、非b、非c、非d、非e在逻辑上等价于a、b、c、d、e(德摩根斯定律)你不要a,不要b,不要c,不要d,不要c
y1aodyip2#
你有两个问题。
首先,你的情况不正确。如果要检查答案是否为任何允许值,则条件应为:
以及
请参阅马修的答案以获得解释。
第二,你在打电话
Quiz.ask(Question)
递归地,这使得循环继续在无效的答案上运行,即使用户在随后的调用中提供了正确的答案(请继续阅读并理解递归调用是如何工作的-尤其是如何管理局部变量)。解决这个问题的方法是do while循环(还有其他方法),如下所示:ubby3x7f3#
只要条件被评估为true,“while循环”就会继续。
“| |”(或逻辑运算符)仅在所有语句都为false时返回false,例如:false | | false=false
在您的代码中,如果用户选择b,例如,第一次求值
!answer.equals("A")
打破你想要的,返回true,忽略其他语句。更改“while循环”以根据需要正确评估您的条件(继续询问,直到答案与“a”或“b”或“c”或“d”或“e”不同)。所以,准确地说:
注意“!”(不是逻辑运算符)和括号的使用,这对它的工作至关重要。