我正在研究2D阵列。问题很简单,但我无法弄清楚。当我尝试访问索引array[i-1][j]
中的值时,它会抛出空指针异常。虽然访问像array[2-1][2]
这样的索引似乎完全合法。为什么不工作?有什么逻辑可以解释为什么我无法从一个反向索引访问数组,或者我做错了请解释。
声明和初始化数组的代码:
this.Result = new Integer[len][6];
发生空指针异常的代码:
for(int i=0;i<Result.length;i++) {
if(i==0){
Result[i][4]=0;
}
else if(Result[i][1]!=null) {
Result[i][4]=(Result[i-1][2]+Result[i-1][3])+Result[i][2];
}
}
提前致谢,请忽略语法错误。
答案 0 :(得分:1)
好吧,看起来数组中的字段尚未正确初始化。虽然int[] intArray = new int[length];
之类的内容会将数组中的所有值初始化为零,但Integer[] integerArray = new Integer[length];
只会使用null
值填充数组。
您确定已正确初始化阵列中的所有字段吗?
答案 1 :(得分:1)
您正在创建包装器Integer
类型的数组。这意味着所有元素的默认值为null
。
在这一行:
Result[i][4]=(Result[i-1][2]+Result[i-1][3])+Result[i][2];
您正在访问可能未初始化的元素,这会导致NullPointerException
。
我建议您对数组元素使用原始int
类型,以避免在null
上执行操作。另一个选项是在尝试访问和执行计算之前,使用值0
初始化所有元素。
答案 2 :(得分:0)
由Integer
引起的异常是java中的Wrapper
类。因此,此2-D
数组将填充null
而不是0
。
如果您更换代码
带有this.Result = new Integer[len][6];
的 this.Result = new int[len][6];
错误将解决。