【问题标题】:NullPointerException when trying to set a double array in java尝试在 java 中设置双精度数组时出现 NullPointerException
【发布时间】:2011-11-27 18:45:58
【问题描述】:

这是我认为的相关代码

class Sudoku {
    int[][] grid;     

    void generateSudokuFromInput()
    {

      grid = new int[][]   <--- java.lang.NullPointerException at Sudoku.generateSudokuFromInput(Sudoku.java:309)
      {
         (...)
      }
    }

    void solveIt() {

      generateSudokuFromInput(); 

    }

}

不断收到 NullPointer 错误

【问题讨论】:

  • 你能发布尽可能多的编辑的确切代码吗?

标签: java arrays multidimensional-array compiler-errors nullpointerexception


【解决方案1】:

要创建数组,您必须指定下标值。

grid = new int[2][];
grid[0]=new int[2];
grid[1]=new int[5];

grid=new int[3][3];

要了解有关数组的更多信息,请参阅this 文档。

【讨论】:

  • 不,您不必这样做。还有另一种选择。
  • @EugeneKuleshov 我已经提到了可能的方法,但我不确定他/她想要什么。
  • @EugeneKuleshov - 我不确定这些答案是否值得投反对票;如果 OP 不想想要在分配时初始化数组,它们不错的选择。
【解决方案2】:

您需要提供第一个维度的尺寸:

grid = new int[3][];

否则,您希望第二个维度如何工作? 二维数组 [i][j] 基本上意味着“我的数组有 i 个数组,每个数组都有 j 个值”。如果没有 i,那什么都没有。

【讨论】:

  • 不一定。这同样有效:grid = new int[][] {{1, 1}, {1, 1}};
  • 是的,因为它显式初始化了数组,效果是一样的。
【解决方案3】:

声明多维数组时,必须指定除最后一维以外的所有维数。

例如

grid = new int [3][];

这会很好用。

【讨论】:

  • 如果你初始化它就不必了。
【解决方案4】:

作为稍后声明数组大小的替代方法(如其他答案中所述),您也可以在声明数组时对其进行初始化:

class Sudoku {
    int[][] grid = {
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0}
    };

    void generateSudokuFromInput() {
        // just set the values on grid, e.g. grid[0][0] = 9
    }

    void solveIt() {
        generateSudokuFromInput();
    }
}

【讨论】:

  • 同样的初始化代码也可以在 generateSudokuFromInput() 方法中使用。
  • 呃,是的。那里有点脑残。我将更新我的示例:P
猜你喜欢
  • 2010-12-11
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
相关资源
最近更新 更多