While循环嵌套if-else java

While循环嵌套if-else java,java,if-statement,while-loop,Java,If Statement,While Loop,我的while循环有问题。它需要不断地问这个问题,直到答案是正确的。有人能给点建议吗 public class QuizW { public static void main(String[] args) { String question = "What is the capital of Australia? \n"; question += "A. Sydney\n"; question

我的while循环有问题。它需要不断地问这个问题,直到答案是正确的。有人能给点建议吗

public class QuizW
{
    public static void main(String[] args)
    {
        String question = "What is the capital of Australia? \n";
        question += "A. Sydney\n";
        question += "B. Melburne\n";
        question += "C. Perth\n";
        question += "D. Cannberra\n";
        question += "E. Brisbane\n";

        String answer = JOptionPane.showInputDialog(question);
        answer = answer.toUpperCase();
        int answerCorrect = 0;
        
        while (answerCorrect == 0)
        {
            if (answer.equals("D"))
            {
                JOptionPane.showMessageDialog(null, "Correct!");
                break;
            }
            else if (answer.equals("A") || answer.equals("B") || answer.equals("C") || answer.equals("E"))
            {
                JOptionPane.showMessageDialog(null, "Incorrect. Please try again.");
            }
            else
            {
                JOptionPane.showMessageDialog(null, "Invalid answer. Please enter A, B, C, D, or E.");
            }
            JOptionPane.showInputDialog(question);
        }
    }
}

您可以这样做:

publicstaticvoidmain(字符串[]args){
扫描仪=新的扫描仪(System.in);
String question=“澳大利亚的首都是什么?\n”
+“A.悉尼\n”
+“B.墨尔本\n”
+“C.珀斯\n”
+“D.堪培拉\n”
+“E.布里斯班\n”;
System.out.println(问题);
字符串应答=scanner.next().toUpperCase();
while(true){
如果(答案等于(“D”)){
系统输出打印项次(“正确”);
打破
}else if(answer.equals(“A”)| answer.equals(“B”)| answer.equals(“C”)| answer.equals(“E”)){
System.out.println(“回答错误,再试一次”);
}否则{
System.out.println(“输入错误”);
}
答案=scanner.next().toUpperCase();
}
}
我只使用控制台,不使用jpannes,但您可以获得逻辑

结果控制台:

What is the capital of Australia? 
A. Sydney
B. Melburne
C. Perth
D. Cannberra
E. Brisbane

a
Wrong answer, try again.
b
Wrong answer, try again.
p
Incorrect input
d
Correct

要缩短检查工作值,可以使用:

String[] wrong = {"A", "B", "C", "E"};
...
Arrays.asList(wrong).contains(answer)

如果你在开始时要求答案,而你只需写一次:

String answer =null;
while (true) {
    answer = scanner.next().toUpperCase();
    if (answer.equals("D")) {
        System.out.println("Correct");
        break;
    } else if (answer.equals("A") || answer.equals("B") || answer.equals("C") || answer.equals("E")) {
        System.out.println("Wrong answer, try again.");
    } else {
        System.out.println("Incorrect input");
    }
}

它还解决了您的错误:)

您忘记了在循环中更新答案->
answer=JOptionPane.showInputDialog(问题)非常感谢。我仍然缺少更新答案=answer.toUpperCase()的内容;JOptionPane.showInputDialog(问题);在回答错误后进行更新?如果你想再次显示一个问题,你必须把它放在while循环的开头,不要在while循环之前使用它。非常感谢。你帮我省了几个小时的睡眠时间。你的虚拟啤酒或咖啡我请客。它是如此简单…使它。谢谢你的帮助