【问题标题】:NullPointerException on multidimensional string array [duplicate]多维字符串数组上的 NullPointerException [重复]
【发布时间】:2018-03-05 03:58:18
【问题描述】:

我不断收到此错误:线程“主”java.lang.NullPointerException 中的异常。我不确定这里出了什么问题..

String[][][][] fourDArray = new String[numOfModules+1][3][][];
    String[] x = new String[1];
    x[0] = splitArray[0];   
    fourDArray[0][0][0] = x;

【问题讨论】:

  • 很明显,你没有定义第三维和第四维大小
  • 当数组的大小(或者它的维度)没有声明时,它不能被使用。它还没有第 0 个元素。如果你希望它是动态的,你必须使用ArrayList

标签: java arrays multidimensional-array nullpointerexception null-pointer


【解决方案1】:

定义多维数组时,必须至少定义第一维大小。这是初始数组。所有其他维度只是子数组。可能没有定义,即当你阅读它时你会得到 NPE。

一步一步来:

  1. 定义一个4 维数组。第一个维度,大小为 2。这意味着我们定义 one-dimension 数组有 2 个元素,其中每个元素是 tree-dimension 数组,即Object,然后是默认值是null

    int[][][][] arr = new int[2][][][];

  2. 然后我们就可以用同样的方式处理下一个维度了。

    arr[0] = new int[2][][]; arr[1] = new int[2][][];

  3. 这就是您获得 NPE 的原因。您必须手动使用 new 语句定义所有维度(JVM 不会自动执行此操作)。

【讨论】:

    【解决方案2】:

    数组中第 3 维和第 4 维的大小未知,从而导致错误。

    如需使用请注明尺寸。

    类似的东西。

     String[][][][] fourDArray = new String[10][3][6][7];
    

    【讨论】:

      【解决方案3】:

      在初始化时不分配(定义大小)维度是可以的,但是如果您在分配之前尝试访问它,它将不起作用。这就是您的代码在第 3 维中发生的情况。

          //Since you are going to access 3rd dimension later, you will have to allocate it
          String[][][][] fourDArray = new String[numOfModules + 1][3][3][];
          String[] x = new String[1];
          x[0] = "some_string";
          //So, it is OK to access (index by) 3rd dimension
          fourDArray[0][0][0] = x;
      

      【讨论】:

        猜你喜欢
        • 2010-12-19
        • 2012-10-05
        • 1970-01-01
        • 1970-01-01
        • 2019-03-24
        • 2013-05-08
        • 1970-01-01
        • 2016-08-10
        • 1970-01-01
        相关资源
        最近更新 更多