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

