我一直试图用Java创建一个程序,问一个问题,然后根据用户的输入显示其中一个对话框。由于某些原因,当我单击正确的选项时,它会给我“错误。正确的答案是A”。消息,尽管应该说“正确!”。我怀疑在[[check()方法(第25至34行)中某个地方的错误,但是我不确定,因为代码看起来非常简单,我无法真正确定出什么问题以及程序为什么不这样做工作不正常。有人可以帮忙吗?
import javax.swing.JOptionPane;
public class Quiz {
public static void main(String[] args) {
String question = "What color is the hair of Disney princess Jasmine?\n";
question += "A. Black\nB. White\nC. Green\nD. Blue\nE. Rainbow";
// ask(question);
check(question, "A");
}
static String ask(String question) {
while (true) {
String answer = JOptionPane.showInputDialog(question);
answer = answer.toUpperCase();
if (answer.equals("A")) {
return question.toUpperCase();
}
else if(!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.");
}
}
}
static void check(String question, String correctAnswer) {
String answer = ask(question);
if (answer.equals(correctAnswer)) {
JOptionPane.showMessageDialog(null,"Correct!");
}
else {
JOptionPane.showMessageDialog(null, "Incorrect. The correct answer is A.");
}
}
}
if (answer.equals("A")) {
return question.toUpperCase();
}
应该是
if (answer.equals("A")) { return "A"; }
另请参见check
和
String answer = ask(question);
[第二,您的方法询问现在仅在用户回答A时返回。因此,您应采用这种方式,也返回诸如B的答案,以便您的“ check”方法(似乎正确)可以对这些答案进行分类错误。
ask(String question)
考虑“ A”选项(您情况下的正确答案)以及除(B,C,D和E)以外的所有其他可能性。为什么?因为,在您的if语句中,您告诉它这样做://This means in case we have all other answers except A (according to the
//condition in the if), B, C, D and E
else if(!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.");
}
您应该添加一个else
来完成它,然后覆盖所有选项:
if (answer.equals("A")) { //Case we choose A return "A"; }else if(!answer.equals("B") && !answer.equals("C") && !answer.equals("D") && !answer.equals("E")) { //All other options JOptionPane.showMessageDialog(null,"Invalid answer. Please enter A, B, C, D, or E."); }else{ //Case we choose B, C, D or E //As the return is different from the correct answer //The message "Incorrect. The correct answer is A." should appear return "Incorrect answer"; }