Java中通过for循环累加BMI总和并计算平均值的实现问题
修正后的BMI平均值计算代码
嘿,我来帮你完善这段计算群体BMI平均值的Java代码~先看看原代码里需要调整的几个关键点,再给你完整的可运行版本:
原代码的核心问题
- BMI计算的精度与可读性问题:原代码里直接修改
weight和height的赋值逻辑容易混淆变量含义,而且用int类型直接做除法会丢失小数精度(BMI通常是带小数的数值)。 - 累加变量类型错误:用
int sum存储BMI总和会截断小数部分,导致最终平均值严重不准确。 - 输入逻辑不完整:Scanner对象未初始化,也没有循环读取多个人体重身高的流程。
完整修正代码
import java.util.Scanner; public class BMIAverageCalculator { // 计算单个用户的BMI值,返回double类型保证精度 public static double calculateBMI(int weightKg, int heightCm) { // BMI公式:体重(kg) / (身高(m))² = 体重(kg) * 10000 / (身高(cm))² // 用10000是因为1m=100cm,平方后对应10000cm² return (double) weightKg * 10000 / (heightCm * heightCm); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 先获取统计的总人数 System.out.print("请输入总人数:"); int totalPeople = scanner.nextInt(); double totalBMI = 0.0; // 用double存储BMI总和,避免精度丢失 // 循环读取每个人的体重和身高 for (int i = 1; i <= totalPeople; i++) { System.out.printf("请输入第%d个人的体重(kg):", i); int weight = scanner.nextInt(); System.out.printf("请输入第%d个人的身高(cm):", i); int height = scanner.nextInt(); // 计算当前用户的BMI并累加到总和 double bmi = calculateBMI(weight, height); System.out.printf("第%d个人的BMI值为:%.2f%n", i, bmi); totalBMI += bmi; } // 计算并输出平均值 double averageBMI = totalBMI / totalPeople; System.out.printf("所有人的BMI平均值为:%.2f%n", averageBMI); scanner.close(); } }
代码优化说明
- 清晰的BMI计算逻辑:
calculateBMI方法明确参数含义,通过强制类型转换(double) weightKg确保除法运算保留小数精度。 - 完整的输入流程:先读取总人数,再通过for循环逐个收集用户数据,同时实时反馈单个人的BMI结果。
- 精度保障:全程用
double类型处理BMI相关数值,避免整数除法带来的精度丢失问题。 - 用户友好提示:添加了明确的输入引导,让用户清楚知道需要输入的内容。
内容的提问来源于stack exchange,提问作者Carl-Wilhelm Brown
相关产品推荐
相关产品推荐

