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

Java递归结合异常处理做double输入校验返回0问题排查

问题成因

你代码的核心问题是catch块中递归调用方法后,没有将递归返回的结果赋值给当前层级的userInputNumber变量,完整执行流程如下:

  1. 第一次调用方法时,userInputNumber被初始化为0
  2. 输入错误触发catch块,你调用了递归方法,第二次调用的方法确实成功拿到了正确的double值,但这个返回值没有被第一次调用的方法接收,第一次调用上下文里的userInputNumber还是保持初始的0值
  3. 递归执行完毕回到第一次调用的方法后,方法直接返回了初始值0,因此得不到正确的输入结果

修复方案

方案1:调整递归逻辑,接收递归返回值

直接将catch块内的递归调用结果作为当前方法的返回值即可:

private static double variableNumberInput(String variableName, Scanner userInput) {
    double userInputNumber = 0;
    try {
        System.out.println(String.format("Input value: %s", variableName));
        userInputNumber = Double.valueOf(userInput.nextLine());
    } catch (Exception exception) {
        System.out.println("Please try again");
        // 直接返回递归调用的结果,不再走当前层级的默认return逻辑
        return variableNumberInput(variableName, userInput);
    }
    return userInputNumber;
}

方案2:改用循环实现(更推荐)

如果用户反复输入错误内容,递归层级过高会触发栈溢出风险,用循环实现重试逻辑更稳妥:

private static double variableNumberInput(String variableName, Scanner userInput) {
    while (true) {
        try {
            System.out.println(String.format("Input value: %s", variableName));
            return Double.valueOf(userInput.nextLine());
        } catch (Exception exception) {
            System.out.println("Please try again");
            // 输入错误直接进入下一轮循环重试
        }
    }
}

内容的提问来源于stack exchange,提问作者M. Kel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:15:03