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

