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

Java命令行程序:如何避免重复判断实现--exit随时退出

优化Java命令行输入的重复退出判断逻辑

核心思路

把输入读取、退出检查的重复逻辑抽成通用工具方法,消除冗余的if判断,同时统一处理输入格式校验(比如数值类型转换)。

方案1:自定义异常实现一键退出

这种方式能彻底去掉调用处的重复判断,代码更简洁:

  1. 定义触发退出的运行时异常:
static class ExitMenuException extends RuntimeException {}
  1. 封装通用输入方法,内置退出检查:
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("请输入有效的整数,重新尝试:");
        }
    }
}
  1. 业务代码调用示例:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:20:29