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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:56:36