如何让BMI图表循环在用户指定的最大体重值处停止?
解决BMI图表循环终止问题
问题根源
你当前的循环条件i < max逻辑错误——这里的max是目标体重上限,但循环变量i是从0开始累加的增量值,两者不是同一个概念。比如你示例中输入的最大体重是155,初始体重是120,那i需要累加到155-120=35就停止,而不是累加到接近155,这才会导致循环一直跑到120+150=270左右才停止。
修正方案
下面两种方案都能让循环在用户指定的最大体重处准确停止:
方案1:直接判断最终体重
修改for循环的条件,确保计算出的newWeight不超过用户输入的max:
for (int i = 0; weight + i <= max; i += 5) { double newWeight = weight + i; // 后续BMI计算和输出逻辑不变 double newBmi = ((newWeight * 703) / (height * height)); String condition = null; if (newBmi < 18.5) { condition = "Underweight"; } else if (newBmi >= 18.5 && newBmi < 25) { condition = "Normal"; } else if (newBmi >= 25 && newBmi < 30) { condition = "Overweight"; } else if (newBmi >= 30) { condition = "Obese"; } System.out.println(newWeight + " " + newBmi + " " + condition); }
方案2:先计算增量上限
提前算出从初始体重到最大体重的总增量,以此作为循环变量的终止边界:
int totalIncrement = max - weight; for (int i = 0; i <= totalIncrement; i += 5) { double newWeight = weight + i; // 后续BMI计算和输出逻辑不变 double newBmi = ((newWeight * 703) / (height * height)); String condition = null; if (newBmi < 18.5) { condition = "Underweight"; } else if (newBmi >= 18.5 && newBmi < 25) { condition = "Normal"; } else if (newBmi >= 25 && newBmi < 30) { condition = "Overweight"; } else if (newBmi >= 30) { condition = "Obese"; } System.out.println(newWeight + " " + newBmi + " " + condition); }
效果验证
用你示例中的初始体重120、最大体重155测试,循环会在i=35时停止,对应的newWeight=155,正好是你期望的终止点,不会继续往后运行。
内容的提问来源于stack exchange,提问作者yani
相关产品推荐
相关产品推荐

