Исключение нулевого указателя на двумерном массиве (Java) - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть класс "Tetris", в котором одной из переменных экземпляра является "board".«Board» - это двумерный массив объектов Color.После создания объекта тетрис я вызываю метод, который устанавливает размеры доски, а затем устанавливает все объекты Color в значение по умолчанию, то есть Color.blue.

public Tetris(int rows, int cols) {
  this.rows = rows;
  this.cols = cols;
  reset(rows, cols);
}

public void reset(int rows, int cols) {
  Color[][] board = new Color[rows][cols];
  for(int i  = 0; i<this.rows; i++) {
    for(int j  = 0; j<this.cols; j++) {
      board[i][j] = DEFAULT_COLOR; //  Color.blue; //DEFAULT-COLOR
    }
  }
}

К сожалениюКогда я запускаю код (который, очевидно, не был опубликован полностью), я получаю исключение нулевого указателя в строке:

board[i][j] = DEFAULT_COLOR; //  Color.blue; //DEFAULT-COLOR.

Что-то явно не так с тем, что я делаю?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

Было бы полезно, если бы вы опубликовали бы короткую, но полную программу, которая продемонстрировала проблему. Размещенного вами кода недостаточно, чтобы вызвать исключение, но я вижу, как с несколькими изменениями это может произойти.

В частности, мне кажется странным, что вы объявляете новую локальную переменную в вашем reset методе ... и у вас также есть переменная экземпляра с именем board? Я подозреваю, что решение может быть так же просто, как изменить начало reset на:

board = new Color[rows][cols];

Если ваш реальный код использует локальную переменную для создания массива, но затем пытается присвоить значения через переменную экземпляра, это вполне может быть причиной проблемы.

Также кажется неправильным, что вы передаете rows и cols в метод и используете эти параметры в одном месте, но переменные экземпляра this.rows и this.cols в цикле. Зачем вообще их пропускать?

0 голосов
/ 13 апреля 2010

Я думаю, вы должны выделить каждый из этих цветов следующим образом: доска [i] [j] = новый цвет (...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...