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
相关产品推荐
相关产品推荐

