Java异常处理后Switch陷入死循环问题求助
解决异常处理后Switch陷入无限循环的问题
嘿,这个问题我太熟了!先给你吃个定心丸——根本不是大括号的锅,是Scanner处理输入时的一个常见小坑,我来给你拆解清楚:
问题根源
当你输入的内容不是整数时,scanner.nextInt()会抛出InputMismatchException,但这个错误的输入(比如字符串、符号)并没有被Scanner从输入缓冲区里移除。异常处理代码执行完后,循环回到selection = scanner.nextInt(),它又会读取到同一个错误输入,再次抛出异常,如此反复就形成了无限循环。
解决方案
在catch块里添加一行scanner.nextLine(),把缓冲区里残留的错误输入清空掉,这样下一次调用nextInt()时,Scanner就会等待新的有效输入了。
给你一个完整的修正示例代码:
import java.util.InputMismatchException; import java.util.Scanner; public class MenuDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int selection = 0; boolean isInputValid = false; // 先确保获取到有效的整数输入 while (!isInputValid) { try { System.out.print("请输入你的选择(1-4):"); selection = scanner.nextInt(); isInputValid = true; // 输入有效,跳出输入校验循环 } catch (InputMismatchException e) { System.out.println("⚠️ 输入无效,请输入整数类型的选项!"); scanner.nextLine(); // 关键:清空缓冲区的错误输入 } } // 执行Switch逻辑 switch (selection) { case 1: System.out.println("执行功能1"); break; case 2: System.out.println("执行功能2"); break; case 3: System.out.println("执行功能3"); break; case 4: System.out.println("退出程序"); break; default: System.out.println("无效的选项,请重新输入"); } scanner.close(); } }
额外提示
如果你的循环是包裹着Switch的(比如让用户可以重复选择),记得把输入校验的逻辑也整合到循环里,确保每次循环都能正确处理无效输入,避免再次触发死循环。
内容的提问来源于stack exchange,提问作者Daniel Lopes
相关产品推荐
相关产品推荐

