Java初学者求助:BMI计算器方法间字符串值传递异常问题
解决Java BMI计算器的字符串返回值问题
嗨安迪!我来帮你搞定这个问题😊
首先,你的核心问题出在Java的参数传递机制和方法返回值的处理上:
问题分析
- Java是值传递:String是不可变类,当你把
ergebnis作为参数传给bmirechner方法时,方法拿到的只是这个字符串的一个副本。你在方法里对这个副本做的任何修改,都不会影响原来的ergebnis变量,所以最后打印出来还是空字符串。 - 方法未正确返回结果:你的
bmirechner方法声明了返回String,但代码里没有写return语句返回计算后的结果,这不仅会导致编译错误,也无法把方法内的结果传递回main方法。
修正后的完整代码
我帮你补全了代码逻辑,保留了德语提示,同时修复了返回值的问题:
import java.util.Scanner; public class BmiRechner { // 类名建议首字母大写,符合Java命名规范 public static void main(String[] args) { // 直接接收方法返回的结果字符串 String ergebnis = bmirechner(); System.out.println(ergebnis); } public static String bmirechner() { int kg = 0; float laenge = 0; double bmi = 0; Scanner sc = new Scanner(System.in); // 获取用户输入的体重 System.out.println("Bitte geben Sie ihr Körpergewicht ein."); kg = sc.nextInt(); // 获取用户输入的身高(以米为单位,比如1.75) System.out.println("Bitte geben Sie ihre Körpergröße in Metern ein."); laenge = sc.nextFloat(); // 计算BMI值:体重(kg) / (身高(m) * 身高(m)) bmi = kg / (laenge * laenge); // 根据BMI值生成结果字符串(德语分类) String ergebnisText; if (bmi < 18.5) { ergebnisText = String.format("Ihr BMI beträgt %.2f - Sie sind untergewichtig.", bmi); } else if (bmi < 25) { ergebnisText = String.format("Ihr BMI beträgt %.2f - Sie haben ein normales Gewicht.", bmi); } else if (bmi < 30) { ergebnisText = String.format("Ihr BMI beträgt %.2f - Sie sind übergewichtig.", bmi); } else { ergebnisText = String.format("Ihr BMI beträgt %.2f - Sie haben Adipositas.", bmi); } sc.close(); // 关闭Scanner资源 return ergebnisText; // 返回结果字符串 } }
关键修改点说明
- 移除不必要的方法参数:输入和结果生成都在
bmirechner方法内完成,不需要传递外部字符串参数 - 接收方法返回值:在
main方法中直接用ergebnis变量接收bmirechner()的返回结果 - 补全BMI计算逻辑:添加了身高输入、BMI计算,以及根据BMI值生成对应德语提示的逻辑
- 规范命名:类名改成
BmiRechner符合Java大驼峰规范,变量名laenge和德语提示统一 - 关闭资源:使用完Scanner后关闭,避免资源泄漏
这样修改后,你就能正确获取到BMI计算的结果字符串啦!
内容的提问来源于stack exchange,提问作者Ndrslmpk




