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

