为什么我的输出没有在我的 switch 语句后显示

Why isn't my output showing after my switch statement

我正在学习 Java,我以前从未使用过 switch 语句。我试图输入一个简单的迷人测验,但 switch 语句中的某些内容不起作用。

我试过在程序的不同位置放置文本,以测试程序是否每次都到达该代码。我在实际开关中有很好的反应,所以如果我回答错误的问题 1,将显示文本提示。但是任何晚于 switch 语句和 none 的评分输出都会出现,直到 for 循环的所有迭代都完成。我尝试将“correct/incorrect”输出移动到不同的点,其中 none 似乎有效。

Scanner myScanner = new Scanner(System.in);

System.out.println("Enter your name!");
String name = myScanner.nextLine();
int wrongCounter = 0;
boolean correctChecker = false;
int score = 0;
String answer;

System.out.println("Welcome to the Charmed Quiz, " + name + "!");

for (int i = 0; i < 10; i++) {
    if (wrongCounter < 4) {
        switch(i) {
        case 0: 
            System.out.println("Who read the spell that gave the Charmed Ones their powers?");
            System.out.println("Enter your answer");

            answer = myScanner.nextLine();

            switch (answer) {
            case "Pheobe":
                correctChecker = true;
                break;
            default:
                correctChecker = false;
                break;
            }
        case 1:
            System.out
                    .println("Who travelled to a cursed town with Prue when Pheobe was shot in a premonition?");
            System.out.println("Enter your answer");

            answer = myScanner.nextLine();

            switch (answer) {
            case "Cole":
                correctChecker = true;
                break;
            default:
                correctChecker = false;
                break;
            }
        }
        
    

    if (correctChecker == true) {
        score++;
        System.out.println("Correct!");
    } else {
        wrongCounter++;
        System.out.println("Incorrect!");

    }

这段代码有很多很多问题。主要问题是 break 破坏了它可以破坏的最接近的构造,在您的情况下是 inner switch。而您的意图显然是要打破两者。 [A] 在 case 1: 语句之前添加另一个 break,或者 [B] 使用带标签的中断;在第一个 (primary/outer) switch 之前放置 outer: before 之类的内容,然后制作所有这些语句 break outer;.

但是,实际上,none 这个(外部或内部)在开关形式中以任何方式都是合理的。我知道这是一个学习练习,但我会想一些其他的东西来学习。

还有,是菲比,不是菲比。

这绝对不是实现问答游戏的最佳方式,但如果您将其用作学习练习,那么最好的做法是听取@rzwitserloot 的建议。

在主 switch 语句 case 之后添加一个 break,而不是内部 switch 语句。

虽然您可以使用 correctChecker = "Pheobe".equals(answer); 在一行中获取 true 或 false 布尔值,但内部 switch 语句没有实际用处。

这只是意味着您可以避免第二个 switch 语句,从而减少混淆。

您的案例总的来说可能是这样的:

    case 0: 
        System.out.println("Who read the spell that gave the Charmed Ones their powers?");
        System.out.println("Enter your answer");

        answer = myScanner.nextLine();
        correctChecker = "Pheobe".equals(answer);
        break;
        
        }

以后最好把问题和答案放在一个数组中,然后用for循环遍历。 This 是关于该主题的很好的教程。

祝你的项目顺利完成!