2014-11-26 2 views
0

Я работаю над версией игры Жизни Конвея, и я создал метод создания нового поколения, где я копирую матрицу и искал соседних соседей. Однако я хотел бы разделить этот метод на два отдельных метода. Метод копирования матрицы, а затем оригинал newGeneration вызовет copy() для справки. Вот как выглядит мой метод newGeneration прямо сейчас.Копия игры Матрица Жизни

public void newGeneration() { 
    temp = new boolean[board.getRows()][board.getCols()]; 
     for (int i = 0; i < board.getRows(); i++) {    
     for (int j = 0; j < board.getCols(); j++) { 
     if (board.get(i, j)==true) {  
     if (getNeighbours(board, i, j) > 3) { 
      temp[i][j] = false; 
     } else if (getNeighbours(board, i, j) < 2) { 
      temp[i][j] = false; 
     } else{ 
      temp[i][j] = true; 
     } 
     } else if (board.get(i, j) == false) { 
     if (getNeighbours(board, i, j) == 3) { 
      temp[i][j] = true; 
     } 
     } 
     } 
     } 
     for (int i = 0; i < board.getRows(); i++) { 
     for (int j = 0; j < board.getCols(); j++) { 
     board.put(i, j, temp[i][j]); 
     } 
     } 

Я хочу разбить это на два метода: newGeneration() и copy(). Я работаю над этим некоторое время, но я, кажется, испортил переменные i и j, потому что они локально заданы в циклах. Любая помощь с расщеплением этого метода до двух будет оценена, спасибо!

EDIT:

С каким мудрым советом рекомендуя мне this поста, я сделал что-то вроде этого

public void newGeneration() { 
    boolean[][] tempCells = new boolean [board.getRows()][board.getCols()]; 

    for (int row = 0; row < board.getRows(); row++) {    
     for (int col = 0; col < board.getCols(); col++) { 
      int n = getNeighbours(board,row,col); 

      if (n > 3 || n < 2) 
       tempCells[row][col] = false; 
      else if (n == 3) 
       tempCells[row][col] = true; 
      else 
       tempCells[row][col] = temp[board.getRows()][board.getCols()]; 
     } 
    } 
} 

Но это, кажется, не работает должным образом.

+2

Если вы используете IDE как Eclipse, вы можете легко выбрать сегмент кода и нажмите Ctrl + Alt + M для экстракт метод. IDE позаботится о переменных. – Vishal

+0

Что именно вы хотите, чтобы ваши два метода делали? – Eypros

+0

Мне непонятно, что вы просите. –

ответ

0

Простой способ получить копию массива - clone it. Поскольку клон дает лишь неполную копию, она требует явного клонирования для каждого дополнительного измерения для многомерных массивов:

public static boolean[][] copy(boolean[][] source) { 
    boolean[][] copy = source.clone(); 
    for (int i=0; i<copy.length; ++i) { 
     copy[i] = copy[i].clone(); 
    } 
    return copy; 
} 
Смежные вопросы