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

Java Try-Catch输入校验如何实现错误输入仅返回当前环节而非主菜单

问题根因
  • newOrder()方法校验输入失败时直接调用return终止方法执行,自然退回到上层run()方法,外层死循环重新执行run()就会跳转回主菜单
  • Scanner调用nextInt()抛出异常后,无效输入会残留在输入缓冲区中,不清空的话后续所有nextInt()调用都会连续抛出异常,即使加循环也无法正常重新输入
修复后代码
void newOrder() {
    // 初始化name避免编译报错
    int name = 0, choices = 0, duration = 0, order;
    System.out.println();
    do {
        System.out.println("Add new order \n Reflexologist name: \n 1. Mark \n 2. James \n 3. Lily");
        System.out.print("Enter your choice [1...3] ");

        try {
            name = scan.nextInt();
        } catch (Exception e) {
            System.out.println("Please choose a valid option!");
            // 清空缓冲区残留的无效输入
            scan.nextLine();
            continue;
        }

        if (name > 3 || name < 1) {
            System.out.println("Please choose a valid option!");
        }

    } while (name > 3 || name < 1);
    // 此处保留你原本后续的业务逻辑即可
}
核心改动说明
  • 移除了输入异常、数值范围校验失败后的return语句,避免方法提前退回到主菜单
  • 异常捕获块中新增scan.nextLine()清空输入缓冲区,解决非数字输入后连续报错的问题
  • 依托原有的do-while循环逻辑,校验失败后自动重新展示当前环节的输入提示,完全符合你要的不跳转主菜单、直接在当前步骤重新输入的需求

如果后续主菜单、updateOrder等其他环节也需要实现同样的校验不退回上层的效果,都可以套用这个do-while循环+清空缓冲区+移除提前return的逻辑改造。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:15:02