2014-11-04 2 views
0

У меня есть небольшая проблема, я надеюсь, что вы можете мне помочь:Инициализировать двойной Java массив со значением перечисления

У меня есть класс в Java под названием ЗНАК и имеет это внутри:

public enum TOKEN { EMPTY, WHITE, BLACK } 

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

public class Board {  
private int row; 
private int column; 
private TOKEN[][] board; 

public Board(int nr, int nc){  
    this.row = nr; 
    this.column = nc; 
    for(int a=0; a < row; a++) 
    { 
     for(int b=0; b < column; b++) 
      board[a][b] = TOKEN.EMPTY; 
    }  
} 

NR и NC являются Интс и имеют значения (например, 6,7), но когда я пытаюсь запустить код, он останавливается здесь (первая итерация)

доска [а] [б] = TOKEN.EMPTY;

Кто-то может мне помочь? Спасибо!

+0

остановки? что происходит точно? любые сообщения об ошибках, которые вы можете предоставить? –

ответ

3

Вы должны инициализировать массив первых:

board = new TOKEN[nr][nc]; 
2

Вы должны инициализировать переменную board первого использования new TOKEN[nr][nc]:

public class Board { 
    private final int row; 
    private final int column; 
    private final TOKEN[][] board; 

    public Board(int nr, int nc) { 
     this.row = nr; 
     this.column = nc; 
     // here we initialize the array, otherwise board will be null 
     board = new TOKEN[nr][nc]; 
     for (int a = 0; a < row; a++) { 
      for (int b = 0; b < column; b++) { 
       board[a][b] = TOKEN.EMPTY; 
      } 
     } 
    } 

    public static void main(String[] args) { 
     Board board = new Board(10, 10); 
    } 
} 
0

Missing инициализация:

... 
board = new TOKEN[row][column]; // <--- 
for(int a=0; a < row; a++) 
... 
0

В конструкторе Board вам нужно инициализировать массив firs т, прежде чем вы можете заполнить его с пустыми лексем:

public Board(int nr, int nc) { 
    board = new TOKEN[nr][nc]; // initializes the matrix with nr arrays of nc size 
    this.row = nr; 
    this.column = nc; 
    for (int a = 0; a < row; a++) { 
     for (int b = 0; b < column; b++) { 
      board[a][b] = TOKEN.EMPTY; 
     } 
    } 
} 
0

Вы утаивать ошибку вы получаете: NullPointerException. И вы получаете это исключение, потому что вы просто забыли инициализировать свой массив:

public Board(int nr, int nc){  
    this.row = nr; 
    this.column = nc; 
    this.board = new TOKEN[nr][nc]; // <-- here 
    for(int a=0; a < row; a++) { 
     for(int b=0; b < column; b++) 
     board[a][b] = TOKEN.EMPTY; 
    }  
} 
Смежные вопросы