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

Java中大小依赖另一实例变量的实例数组如何正确初始化?

问题原因

类的实例变量初始化顺序早于构造器执行逻辑,你在类成员位置定义private int[] visitedList = new int[V];时,成员变量V还没被构造器赋值,使用的是int类型的默认值0,因此你初始化的数组长度为0,后续构造器中遍历赋值时会触发数组下标越界异常。

正确实现方案

不需要单独写初始化方法,直接把数组初始化逻辑移到构造器中,V赋值完成后执行即可。另外Java中int类型数组初始化后,元素默认值就是0,无需手动循环赋值,可简化代码。
修正后的代码如下:

public class Graph {
    // Number of Vertices and Edges:
    private int V;
    private int E;
    // 仅声明数组,暂不执行初始化
    private int[] visitedList;

    // Constructor:
    public Graph(int V){
        this.V = V;
        this.E = 0;
        // V赋值完成后再初始化数组,长度和V保持一致
        visitedList = new int[V];
        // int数组默认元素值为0,无特殊需求不需要手动循环赋值
    }
}

如果后续有特殊初始化需求(比如需要把元素统一设为-1),再在数组初始化后添加循环逻辑即可:

for (int i = 0; i < V; i++) {
    visitedList[i] = -1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:18:01