You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在switch的default分支设置循环,强制用户输入1或2以继续测验?

解决测验程序的输入验证循环问题

嘿,我看你这段代码里的输入验证逻辑有点小问题,咱们一步步捋清楚哈!

你现在的核心问题是default块里的while循环根本没法正常工作——因为你一进入default分支就直接return bingo = false;了,循环代码还没来得及执行,方法就直接结束了,自然没法循环提示用户重新输入。另外还有个隐藏坑:如果用户输入的不是整数(比如字母),scan1.nextInt()会直接抛出异常,程序直接崩掉。

咱们来调整下代码,把输入验证的逻辑单独抽出来做循环,确保用户必须输入合法的1或2才会继续往下走:

public static boolean generateQuestion2(String question, String answer1, String answer2) {
    boolean bingo;
    Scanner scan1 = new Scanner(System.in);
    int antwort = 0; // 先初始化一个默认值

    // 先打印题目和选项
    System.out.println(question);
    System.out.println("(1) " + answer1);
    System.out.println("(2) " + answer2);

    // 循环获取输入,直到用户输入合法的1或2
    while (true) {
        System.out.println("请输入1或2来选择答案:");
        // 先判断输入是否是整数,避免非数字输入导致异常
        if (scan1.hasNextInt()) {
            antwort = scan1.nextInt();
            // 检查输入是否符合要求
            if (antwort == 1 || antwort == 2) {
                break; // 输入合法,跳出循环
            } else {
                System.out.println("无效输入!请输入1或2");
            }
        } else {
            System.out.println("请输入有效的数字!");
            scan1.next(); // 清除掉非整数的输入内容,防止死循环
        }
    }

    // 现在处理正确的输入判断
    switch (antwort) {
        case 1:
            System.out.println("Falsch...");
            bingo = false;
            break;
        case 2:
            System.out.println("Richtig!");
            bingo = true;
            break;
        default:
            // 这里其实不会走到,因为前面已经验证过输入只能是1或2
            bingo = false;
            break;
    }
    return bingo;
}

主要改了这几个关键点:

  • 把输入验证做成死循环,直到用户输入合法值才跳出,强制用户必须输入1或2
  • 增加hasNextInt()判断,处理用户输入非整数的情况,避免程序崩溃
  • 移除了原来default块里无效的循环和提前return的逻辑,让循环能正常执行提示
  • 初始化antwort变量,解决未初始化的编译问题

这样修改后,不管用户输入错误数字还是非数字,都会被循环提示重新输入,直到输入符合要求为止,完美解决你的需求!

内容的提问来源于stack exchange,提问作者Buddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:57:37