NullPointerException при попытке установить двойной массив в Java - PullRequest
0 голосов
/ 29 сентября 2011

Это соответствующий код, я думаю

class Sudoku {
    int[][] grid;     

    void generateSudokuFromInput()
    {

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

    void solveIt() {

      generateSudokuFromInput(); 

    }

}

Продолжайте получать ошибку NullPointer

Ответы [ 4 ]

3 голосов
/ 29 сентября 2011

При объявлении многомерного массива необходимо указать все размеры, кроме последнего.

Например:

grid = new int [3][];

Это будет хорошо работать.

2 голосов
/ 29 сентября 2011

В качестве альтернативы объявлению размера массива позже (как описано в других ответах), вы также можете просто инициализировать массив при его объявлении:

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();
    }
}
1 голос
/ 29 сентября 2011

Вам необходимо указать размер для первого измерения:

grid = new int[3][];

Иначе, как вы ожидаете, что второе измерение будет работать? 2-мерный массив [i] [j] в основном означает «В моем массиве есть массивы i, у каждого из них есть значения j». Если нет меня, это ничего не значит.

1 голос
/ 29 сентября 2011

Для создания массива необходимо указать значение индекса.

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

или

grid=new int[3][3];

Чтобы узнать больше о массивах, обратитесь к этому документу.

...