生命游戏矩阵副本

时间:2014-11-26 15:02:31

标签: java matrix conways-game-of-life

我正在研究Conway的生命游戏版本,我已经创建了创建新一代的方法,我在其中复制矩阵并寻找附近的邻居。但是,我想将此方法拆分为两个单独的方法。矩阵的复制方法然后是原始的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,因为它们是在循环中本地设置的。任何有关将此方法分为两个的帮助都将不胜感激,谢谢!

编辑:

从推荐我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()];
        }
    }
}

但它似乎无法正常工作。

1 个答案:

答案 0 :(得分:0)

获取数组副本的一种简单方法是克隆它。由于clone只提供浅拷贝,因此需要为多维数组的每个附加维度进行显式克隆:

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;
}