Java求平均值程序异常:测试用例12,2,8,0结果不符求助
问题:Java求平均值程序计算错误
我正在学习MOOC课程,作为编程新手,搞不懂自己写的Java求平均值程序为啥出错。测试用例average(4, 3, 6, 1)结果和预期一致(3.5),但average(12, 2, 8, 0)时程序输出7.33333,和预期的5.5对不上。之前把sum方法的固定参数改成动态参数解决了部分问题,但现在这个问题还存在。
相关代码
public class Averaging { public static int sum(int number1, int number2, int number3, int number4) { return number1 + number2 + number3 + number4; } public static double average(int number1, int number2, int number3, int number4) { int count = 0; if (number1 != 0) { count++; } if (number2 != 0) { count++; } if (number3 != 0) { count++; } if (number4 != 0) { count++; } double total = sum(number1, number2, number3, number4); double average = (double) total / count; return average; } public static void main(String[] args) { double result = average(4, 3, 6, 1); System.out.println("Average: " + result); } }
测试结果
average(4, 3, 6, 1) // result: 3.5 ; expected: 3.5 average(12, 2, 8, 0) // result: 7.33333; expected: 5.5
问题原因与修复方案
问题根源
你的average方法里,把0排除在计数之外了。当输入包含0时,比如average(12, 2, 8, 0),count只统计了3个非0数字,总和是12+2+8+0=22,22/3≈7.33333,但实际预期是4个数字的平均值,22/4=5.5。这说明你的需求是计算所有输入参数的平均值,而不是排除0的平均值。
修复方案
方案1:适配当前固定4个参数的场景
直接将count固定为参数总数4,去掉判断非0的逻辑:
public static double average(int number1, int number2, int number3, int number4) { int count = 4; double total = sum(number1, number2, number3, number4); return (double) total / count; }
方案2:改用可变参数(支持任意数量输入)
如果需要处理任意个数的整数输入,修改sum和average方法为可变参数,扩展性更好:
public class Averaging { public static int sum(int... numbers) { int total = 0; for (int num : numbers) { total += num; } return total; } public static double average(int... numbers) { if (numbers.length == 0) { return 0.0; // 避免空输入时除以0 } int total = sum(numbers); return (double) total / numbers.length; } public static void main(String[] args) { double result1 = average(4, 3, 6, 1); System.out.println("Average 1: " + result1); // 输出3.5 double result2 = average(12, 2, 8, 0); System.out.println("Average 2: " + result2); // 输出5.5 } }
内容的提问来源于stack exchange,提问作者Aegon
相关产品推荐
相关产品推荐

