问题描述
我必须计算每个单元格有多少个“存活”(在这种情况下为char:'O')。每个小区有8个邻居。 (这是来自康威的《人生游戏》)
“您可能会注意到,每个像元有八个邻居。我们认为宇宙是周期性的:边界像元也有八个邻居。例如:Neighbours from a "normal" cell
如果单元格是右边界,则其右(东)邻居是同一行中最左边的单元格。 如果单元格是底部边框,则其底部(南部)邻居是同一列中的最顶部单元格。 角单元使用两种解决方案。“ When a cell is border and when a cell is a top corner
这些链接是在出现“异常”情况下如何检查单元格的可视化视图。
我在互联网上找到了这个
`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]
)上一个单元有多少个活着的邻居...
有人建议,技巧或其他帮助吗?
解决方法
试一试。我使用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();
}