我正在研究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()];
}
}
}
但它似乎无法正常工作。
答案 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;
}