如何在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
相关产品推荐
相关产品推荐

