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

向已存在数组新增元素(不使用ArrayList)的代码异常排查

问题原因分析
  • static方法访问非静态成员错误:addValue 被定义为static静态方法,但类中的data是普通成员变量,静态方法不能直接访问非静态的类成员,会直接触发编译错误。
  • 数组赋值逻辑错误:你在循环拷贝原数组元素的过程中,每次都给a[i+1]赋值为新值,会导致新数组中除了第一个原数组元素,中间所有位置都会被新值反复覆盖,最终只有原数组最后一个元素和末尾的新值符合预期,中间值全部错误。你认为单独测试代码正常只是认知偏差,实际输出和你想要的末尾追加效果完全不符。
  • 没有更新类内的原数组:你创建的新数组a只是方法内的局部变量,方法执行完就会被回收,没有赋值给类的data成员,下次调用方法还是基于原始的空数组操作,完全无法存储新增的值。
修正后的代码
public class Measurement {

    private int[] data;

    public Measurement() {
        data = new int[0];
    }

    // 去掉static修饰,改为成员方法
    public void addValue(int value) {
        int [] a = new int [data.length + 1];
        // 先循环拷贝所有原数组元素
        for(int i = 0; i < data.length; i++) {
            a[i] = data[i];
        }
        // 循环结束后再给新数组的最后一位赋值新值
        a[data.length] = value;
        // 将新数组赋值给类的data成员,完成更新
        data = a;

        // 打印验证
        for(int i: data) {
            System.out.println(i);
        }
    }

    // 测试用main方法
    public static void main(String[] args) {
        Measurement measurement = new Measurement();
        measurement.addValue(1);
        measurement.addValue(3);
        measurement.addValue(4);
    }
}
修改说明
  • 去掉了addValue方法的static修饰符,改为普通成员方法,可以正常访问类的data成员变量
  • 将新值的赋值操作移到循环外,仅在所有原数组元素拷贝完成后,给新数组的最后一个位置赋值
  • 方法最后将新数组赋值给类的data成员,保留新增的元素,后续调用可以基于更新后的数组继续添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:54:00