【问题标题】:Game of life malfunctioning人生游戏失灵
【发布时间】: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 复制二维数组。
  • 我会自己做,但是谢谢!

标签: java logic


【解决方案1】:

我认为问题在于 grann 应该说:

if(i != 0 && j != 0)

因为您只想消除正在检查的 3x3 区域的中心正方形(单元格本身),而不是它所在的行和列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2019-08-05
    • 2021-08-09
    • 1970-01-01
    相关资源
    最近更新 更多