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

Java使用switch case处理用户输入时出现无限循环问题排查

问题原因分析
  • 核心问题是输入读取和字符串拆分的逻辑放在了死循环外部:代码仅在启动时读取1次用户输入、拆分得到part数组,后续死循环运行时永远使用第一次获取的part[0]做switch判断,除了输入EXIT会直接退出程序,其余case的break仅能跳出switch分支,无法终止外层的do-while(true)死循环,因此会反复执行对应case的逻辑。
  • 额外潜在风险:如果用户第一次输入的内容按空白拆分后长度不足2,执行AB分支的part[1]会直接触发数组下标越界异常。
修复后的代码示例
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    do {
        // 读取输入、拆分逻辑移到循环内部,每次循环都读取新的用户输入
        String str = sc.nextLine();
        String[] part = str.split("\\s+");
        // 空输入校验,避免数组下标越界
        if (part.length == 0) {
            System.out.println("输入不能为空,请重新输入");
            continue;
        }
        switch(part[0]) {
            case "AB":
                // 参数合法性校验,避免AB命令后未带数字的异常
                if (part.length < 2) {
                    System.out.println("AB命令后需携带数字参数");
                    break;
                }
                System.out.println("hi");
                int data = Integer.parseInt(part[1]);
                System.out.println(data);
                break;
            case "PR":
                System.out.println("printining");
                break;
            case "AE":
                System.out.println("AE");
                break;
            case "EXIT":
                System.out.println("程序退出");
                sc.close();
                System.exit(0);
                break;
            default:
                System.out.println("未识别的命令,请重新输入");
                break;
        }
    } while(true);
}
修复说明
  • 每次循环都重新读取用户输入并拆分,保证switch判断的是最新输入的命令
  • 新增空输入、命令参数缺失的校验逻辑,避免运行时异常
  • 新增未识别命令的default分支,提升代码健壮性
  • 新增Scanner资源关闭逻辑,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:36:10