conways生命游戏中2d数组的java计数(8个可能的邻居)

gajydyqb  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(363)

我必须计算每个单元格有多少个“活着”(在本例中是一个char:'o')neigbours。每个细胞有8个邻居(这是康威的《生命的游戏》(the game of life)
“正如你所注意到的,每个细胞有八个邻居。我们认为宇宙是周期性的:边界细胞也有八个邻居。例如:来自“正常”牢房的邻居
如果单元格是右边框,则其右(东)邻是同一行中最左边的单元格。如果单元格是底部边框,则其底部(南)相邻单元格是同一列中最上面的单元格。当一个单元格是边框和一个单元格是顶角时
这些链接是如何在“异常”情况下检查单元格的可视化显示。
我在网上找到这个:

`for (int x = -1; x <= 1; x += 1) {
                    for (int y = -1; y <= 1; y += 1) {
                        int r = i + y;
                        int c = j + x;
                        if (r >= 0 && r < n && c >= 0 && c < n && !(y == 0 && x == 0) && currentUniverse[i][j] == 'O') {
                            neighbours++;
                        }`

然而,这似乎不起作用。。。我不能想出一个整洁的,最聪明的/方便的/简短的代码来检查一个位置上有多少个活的邻居(比如 currentUniverse[i][j] )有。。。
有人有什么建议、建议或其他帮助吗?

xj3cbfub

xj3cbfub1#

试试这个。我使用n作为数组的大小(假设为正方形)。

int n = 4;
    System.out.println();
    for (int i = 0; i<n; i++) {
        for (int j = 0; j<n; j++) {
            int neighbours = 0;
                for (int x = -1; x <= 1; x += 1) {
                    for (int y = -1; y <= 1; y += 1) {
                        if (!(y == 0 && x == 0)) {
                            int r = i + y;
                            int c = j + x;
                            //normalize
                            if (r<0) r = n - 1;
                            else if (r == n) r = 0;

                            if (c<0) c = n - 1;
                            else if (c == n) c = 0;
                            if (currentUniverse[r][c] == 0)
                                neighbours++;
                        }
                    }
                }
          System.out.print("\t"+neighbours);
        }
     System.out.println();
    }

相关问题