2015-06-20 104 views
-1

我不明白这个循环出了什么问题,它通常会检查周围的单元格(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; 
} 
+0

几点:1)通常stackoverflow是一种反对让人们来帮助你调试; 2)请给出更多的上下文,如:当你打电话时,传入的参数是什么,以及grid的规格是什么 – songyy

+0

'grid.getWidth() - 1'中'-1'的用途是什么? – Pshemo

+0

我知道这件事,但我要用这个功能疯了,我一直在看它半个小时! 这是一个二维数组的细胞100 * 100 – Spooky

回答

1

你的上限在for声明,应检查<=不仅低于。在进入x+1y+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

相关问题