【问题标题】:cannot access array from index i-1 through Null Pointer exception [duplicate]无法通过空指针异常从索引 i-1 访问数组 [重复]
【发布时间】:2016-04-21 12:37:42
【问题描述】:

我正在处理一个二维数组。问题很简单,但我想不通。当我尝试从索引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];
    }
}

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

【问题讨论】:

  • 哪一行显示 NullPointerExcecption?
  • 你能分享更多代码吗? Result 矩阵的声明是什么?
  • private Integer[][] Result; 在这里
  • Integer 是一个类,因此当您使用 class 对其进行初始化时,它的默认值为 null,当您访问这些 null 值时,您将获得空指针异常,请改用 int,int 将使所有对象的值设为0. 然后你可以使用它们或修改它们。

标签: java arrays multidimensional-array nullpointerexception


【解决方案1】:

您正在创建一个包装器Integer 类型的数组。这意味着所有元素的默认值为null

在这一行:

Result[i][4]=(Result[i-1][2]+Result[i-1][3])+Result[i][2];

您正在访问可能未初始化的元素,这会导致NullPointerException

我建议您对数组元素使用原始int 类型以避免对nulls 执行操作。另一种选择是在尝试访问和执行计算之前使用值 0 初始化所有元素。

【讨论】:

    【解决方案2】:

    好吧,您的数组中的字段似乎没有正确初始化。虽然int[] intArray = new int[length]; 之类的东西会将数组中的所有值初始化为零,但Integer[] integerArray = new Integer[length]; 只会用null 值填充数组。

    您确定已正确初始化数组中的所有字段吗?

    【讨论】:

    • int[][] Result; 和`= new int[len][6];
    【解决方案3】:

    由于Integer 引发的异常是java 中的Wrapper 类。所以,这个2-D 数组将填充null 而不是0

    如果你替换你的代码

    this.Result = new Integer[len][6];this.Result = new int[len][6];

    错误将得到解决。

    【讨论】:

      猜你喜欢
      • 2020-10-17
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 2019-09-22
      • 2014-02-04
      相关资源
      最近更新 更多