Java命令行程序:如何避免重复判断实现--exit随时退出
优化Java命令行输入的重复退出判断逻辑
核心思路
把输入读取、退出检查的重复逻辑抽成通用工具方法,消除冗余的if判断,同时统一处理输入格式校验(比如数值类型转换)。
方案1:自定义异常实现一键退出
这种方式能彻底去掉调用处的重复判断,代码更简洁:
- 定义触发退出的运行时异常:
static class ExitMenuException extends RuntimeException {}
- 封装通用输入方法,内置退出检查:
private static String getInput(Scanner scanner, String prompt) { System.out.println(prompt); String input = scanner.nextLine().trim(); // 用nextLine()支持带空格的输入 if ("--exit".equals(input)) { throw new ExitMenuException(); } return input; } // 重载方法处理整数输入,自动校验格式 private static int getIntInput(Scanner scanner, String prompt) { while (true) { String input = getInput(scanner, prompt); try { return Integer.parseInt(input); } catch (NumberFormatException e) { System.out.println("请输入有效的整数,重新尝试:"); } } }
- 业务代码调用示例:
try { System.out.println("输入--exit可返回主菜单\n"); final String id = getInput(scanner, "请输入ID:"); final String description = getInput(scanner, "请输入描述:"); final int price = getIntInput(scanner, "请输入价格:"); // 后续业务逻辑处理 } catch (ExitMenuException e) { return; // 直接返回主菜单 }
方案2:返回标记值判断退出
如果不想用异常,也可以通过返回null作为退出标记:
private static String getInput(Scanner scanner, String prompt) { System.out.println(prompt); String input = scanner.nextLine().trim(); return "--exit".equals(input) ? null : input; } private static Integer getIntInput(Scanner scanner, String prompt) { String input = getInput(scanner, prompt); if (input == null) { return null; } try { return Integer.parseInt(input); } catch (NumberFormatException e) { System.out.println("请输入有效的整数,重新尝试:"); return getIntInput(scanner, prompt); } }
业务代码调用示例:
System.out.println("输入--exit可返回主菜单\n"); String id = getInput(scanner, "请输入ID:"); if (id == null) { return; } String description = getInput(scanner, "请输入描述:"); if (description == null) { return; } Integer price = getIntInput(scanner, "请输入价格:"); if (price == null) { return; } // 后续业务逻辑处理
额外优化建议
- 替换
scanner.next()为scanner.nextLine():next()会以空格截断输入,无法接收带空格的描述内容,nextLine()能读取整行输入更符合实际使用场景。 - 增加输入校验:比如整数输入时自动校验格式,引导用户重新输入,提升交互体验。
内容的提问来源于stack exchange,提问作者Ingar Asheim
相关产品推荐
相关产品推荐

