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

BMI计算器编译报错:double无法转换为java.lang.String

问题原因

编译错误的核心是方法声明返回String类型,但最后一行return bmi;返回的是double类型,Java不允许这种隐式类型转换。另外你的条件分支存在漏洞:当bmi等于35时,没有任何if/else if分支能匹配,编译器认为程序会走到最后的return语句,因此触发类型不兼容错误。

两种修复方案

方案1:补全条件分支(推荐)

把最后一个else if (bmi > 35)改成else,这样所有未被前面分支覆盖的情况(比如bmi=35)都会进入这个分支,同时可以删掉冗余的return bmi;:

static String berekenBmi(double gewicht, double lengte) {
    double bmi = gewicht / (lengte * lengte);

    if (bmi < 16) {
        return "Gevaarlijk Ondergewicht";
    } else if (bmi >= 16 && bmi < 18.5) {
        return "Ondergewicht";
    } else if (bmi >= 18.5 && bmi < 25) {
        return "Ideaal gewicht";
    } else if (bmi >= 25 && bmi < 30) {
        return "Overgewicht";
    } else if (bmi >= 30 && bmi < 35) {
        return "Obesitas";
    } else { // 覆盖所有剩余情况(包括bmi>=35)
        return "Morbide obesitas";
    }
}

方案2:转换返回值类型

如果不想修改条件分支,把最后的return bmi;改成返回字符串类型的BMI值:

static String berekenBmi(double gewicht, double lengte) {
    double bmi = gewicht / (lengte * lengte);

    if (bmi < 16) {
        return "Gevaarlijk Ondergewicht";
    } else if (bmi >= 16 && bmi < 18.5) {
        return "Ondergewicht";
    } else if (bmi >= 18.5 && bmi < 25) {
        return "Ideaal gewicht";
    } else if (bmi >= 25 && bmi < 30) {
        return "Overgewicht";
    } else if (bmi >= 30 && bmi < 35) {
        return "Obesitas";
    } else if (bmi > 35) {
        return "Morbide obesitas";
    }
    return String.valueOf(bmi); // 将double转为String
}

另外你提到“把开头的double改为String”导致问题更严重,是因为参数gewicht和lengte需要参与数值计算,改成String类型后无法直接做除法和乘法,自然会引发更多编译错误。

内容的提问来源于stack exchange,提问作者Lisa Van Den Broek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:12:37