无法从索引i-1访问数组到空指针异常

时间:2016-04-21 12:37:42

标签: java arrays multidimensional-array nullpointerexception

我正在研究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];
    }
}

提前致谢,请忽略语法错误。

3 个答案:

答案 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];

错误将解决。