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

Java调用void类型Add方法填充数组仅输出空数组该如何解决?

问题根因
  • Add方法中扩容生成的新数组fakeArray没有赋值给成员变量array,原数组始终是长度为1的初始数组,扩容逻辑完全无效
  • toString方法的循环终止条件为i < array.length - 1,当数组长度为1时,循环不会执行,就算数组中存储了元素也无法被打印,只会输出空数组符号
  • 配套的average方法同样存在遍历范围错误的问题,会漏算数组最后一位元素,计算平均值时分母取值也不符合逻辑
修改方案

对Add、toString、average三个方法进行调整即可,修改后的完整代码如下:

public class main
{
    // 初始长度调整为0更符合动态扩容的逻辑
    double[] array = new double[0];

    public static void main(String[] args) {
        main a=new main();
        a.Add(3.5);
        System.out.println(a);
        // 多元素测试验证
        a.Add(4.5);
        System.out.println(a);
        System.out.println("平均值:" + a.average());
    }
    public void Add(double x)
    {
        // 扩容后的新数组赋值给成员变量array
        array = java.util.Arrays.copyOf(array, array.length + 1);
        // 新元素放到数组最后一位
        array[array.length - 1] = x;
    }

    public int size()
    {
        return array.length;
    }

    public String toString()
    {
        StringBuilder values = new StringBuilder("[");
        for (int i = 0; i < array.length; i++) {
            values.append(array[i]);
            // 非最后一个元素加逗号分隔
            if (i != array.length - 1) {
                values.append(",");
            }
        }
        values.append("]");
        return values.toString();
    }

    public double average()
    {
        // 空数组处理避免除以0异常
        if (array.length == 0) {
            return 0d;
        }
        double total = 0;
        // 遍历所有元素累加
        for (double v : array) {
            total += v;
        }
        // 总和除以元素个数得到平均值
        return total / array.length;
    }
}
运行效果

调用a.Add(3.5)后打印结果为[3.5],符合预期,新增多个元素也可以正常输出,平均值计算逻辑也同步修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:24:07