程序从if-else语句输出错误的选项

问题描述 投票:2回答:3

我一直试图用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."); } }
}
java if-statement messagedialog
3个回答
3
投票
您这里有一个小错误,

if (answer.equals("A")) { return question.toUpperCase(); }

应该是

if (answer.equals("A")) { return "A"; }

另请参见check

String answer = ask(question);


2
投票
您应该让方法“ ask”本身返回答案,而不是question.toUppercase。

[第二,您的方法询问现在仅在用户回答A时返回。因此,您应采用这种方式,也返回诸如B的答案,以便您的“ check”方法(似乎正确)可以对这些答案进行分类错误。


1
投票
您的方法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"; }

© www.soinside.com 2019 - 2024. All rights reserved.