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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:50:07