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
相关产品推荐
相关产品推荐

