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

Java中处理函数返回值,实现非法参数场景返回指定错误码的解决方案

问题根因

你当前的判断逻辑存在两个核心缺陷:

  1. 合法调用场景下也可能返回0.0:当入参price为0时,即便transmission取值合法('A'/'M'),计算结果price * 0.05也等于0.0,会和错误场景的返回值冲突,导致逻辑误判。
  2. 直接用==判断浮点数相等存在精度隐患,哪怕当前场景下这个问题不突出,也属于不规范的写法。

你现在能看到错误提示却没有返回-1,大概率是入参price刚好为0,错误场景的返回值和合法计算的返回值完全一致,原判断逻辑本身存在规则漏洞。

最优解决方案

最优的方式是修改被调用函数calculateValuationByTransmission的错误标识逻辑,用业务中不可能出现的返回值代表错误,避免和合法返回值冲突:

步骤1:修改calculateValuationByTransmission的错误返回

把非法入参分支的返回值从0改为Double.NaN(非数字,合法计算场景永远不会返回该值):

public static double calculateValuationByTransmission(double price, char transmission) {
    if (transmission == 'A') {
        return price * 0.05;
    } else if (transmission == 'M') {
        return price * -0.05;
    } else {
        System.out.println("Transmission must be: 'A' or 'M'");
        return Double.NaN; // 替换原来的return 0;
    }
}

步骤2:修改调用处的判断逻辑

用Double.isNaN()方法判断返回值是否为错误标识:

// HERE 处的逻辑修改为
double valueTransmission = PAC1Ex2.calculateValuationByTransmission(price, transmission);
if (Double.isNaN(valueTransmission)){
    return -1;
}

备选方案(无法修改被调用函数时使用)

如果你没有权限修改calculateValuationByTransmission的代码,可以在调用该方法前先校验transmission的取值,从源头避免非法入参:

// 在调用calculateValuationByTransmission之前加校验
if (transmission != 'A' && transmission != 'M') {
    System.out.println("Transmission must be: 'A' or 'M'");
    return -1;
}
double valueTransmission = PAC1Ex2.calculateValuationByTransmission(price, transmission);
// 后续不需要再判断valueTransmission是否为0

这个方案不需要调整原有方法逻辑,也能完全避免你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:36:03