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

Java多输入数据统计程序问题:最大值与平均值计算出错求助

解决Java非负整数统计的最大值与平均值格式化问题

常见错误核心

你遇到的问题根本不是int转字符串的问题,而是整数除法导致的精度丢失。如果直接用int类型的总和 / int类型的数量计算平均值,Java会执行整数除法,直接舍弃小数部分(比如38/4得到9而非9.5),这时候不管怎么转字符串都没法得到正确的小数结果。

正确实现代码

import java.util.Scanner;

public class NumberStats {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int max = -1; // 初始值设为-1,适配所有非负整数输入
        int total = 0;
        int count = 0;

        while (true) {
            int input = scanner.nextInt();
            if (input < 0) {
                break; // 负数终止输入,不纳入统计
            }
            // 更新最大值
            if (input > max) {
                max = input;
            }
            total += input;
            count++;
        }

        // 处理无有效输入的边界情况
        if (count == 0) {
            System.out.println("无有效非负整数输入");
            scanner.close();
            return;
        }

        // 关键:将int总和转为double再做除法,避免整数除法
        double average = (double) total / count;
        // 按要求格式化输出最大值和两位小数的平均值
        System.out.printf("%d %.2f\n", max, average);
        scanner.close();
    }
}

关键要点说明

  • 平均值计算:必须将total强制转换为double类型后再除以count,这样会触发浮点除法,保留小数精度。如果写成total / count,结果还是int类型,直接丢失小数部分。
  • 格式化输出:直接使用System.out.printf("%.2f", average)即可完成两位小数的格式化,不需要额外将数值转字符串,printf会自动处理格式转换。
  • 边界处理:加入了无有效输入(比如直接输入负数)的判断,避免出现除以0的运行时异常。

测试验证

输入:15 20 0 3 -1
输出:20 9.50,完全符合需求。

内容的提问来源于stack exchange,提问作者Littlephoenix12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:25:17