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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:51:09