计数相邻单元格
问题描述:
我不明白这个循环出了什么问题,它通常会检查周围的单元格(x,y)。 当调用此函数时,循环中只有4个通道,而不是8 这可能是一个愚蠢的错误,但我无法看到它!计数相邻单元格
private int countAliveNeighbors(int x, int y) {
int count = 0;
for (int i = Math.max(0, x - 1); i < Math.min(grid.getWidth()-1, x + 1); i++) {
for (int j = Math.max(0, y - 1); j < Math.min(grid.getHeight()-1, y + 1); j++) {
if (!(i == x && j == y)) {
if (grid.isAlive(i, j))
count++;
}
}
}
return count;
}
答
你的上限在for
声明,应检查<=
不仅低于。在进入x+1
或y+1
之前,通过测试低于你的值。它应该看起来像这样:
for (int i = Math.max(0, x - 1); i <= Math.min(grid.getWidth()-1, x + 1); i++) {
for (int j = Math.max(0, y - 1); j <= Math.min(grid.getHeight()-1, y + 1); j++) {
+0
我知道这很愚蠢,谢谢 – Spooky
几点:1)通常stackoverflow是一种反对让人们来帮助你调试; 2)请给出更多的上下文,如:当你打电话时,传入的参数是什么,以及grid的规格是什么 – songyy
'grid.getWidth() - 1'中'-1'的用途是什么? – Pshemo
我知道这件事,但我要用这个功能疯了,我一直在看它半个小时! 这是一个二维数组的细胞100 * 100 – Spooky