【发布时间】:2015-03-13 11:14:11
【问题描述】:
为什么我的人生游戏不能正常运行? 当他们太拥挤时,他们并不总是死去。
相关代码是 grann(x,y),它应该返回矩阵 [x][y] 周围的活细胞数量, run 应该计算下一代:
private int grann(int x,int y) {
int n = 0;
for(int i=-1; i<2; i++) {
for(int j=-1; j<2; j++) {
if(i!=0 || j!=0) {
if(matrix[x+i][y+j]) {
n++;
}
}
}
}
return n;
}
public void run() {
boolean[][] next = matrix;
for(int i=1; i<w; i++) {
for(int j=1; j<h; j++) {
int n = grann(i,j);
if(matrix[i][j]) {
if(!(n==2 || n==3)) {
next[i][j] = false;
}
} else {
if(n==3) {
next[i][j] = true;
}
}
}
}
matrix = next;
}
对象具有矩阵、宽度和高度。 矩阵是布尔[w+2][h+2],w和h是整数。
如果你不知道康威人生游戏的规则: http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
【问题讨论】:
-
因为
next = matrix不会复制矩阵。它们都指向同一个对象。因此,您所做的更改会影响周围单元格的计算。 -
我应该使用循环复制它还是有更简单的方法?
-
见this answer 复制二维数组。
-
我会自己做,但是谢谢!