0

(这是一个填充有对象的二维数组)所以标记为“//Out of Grid”的地方是我不知道如何告诉java它寻找的索引不在网格中并继续前进的地方。

我试图完成的基本概述是通过每个单元开始[0][0]并检查其所有相邻邻居,至于第一次检查其邻居将是[0][1][1][0][1][1]。然后如果索引中对象的年龄为0,则执行某些操作..

for (int i = -1; i <= 1; i++) {
    for (int j = -1; j <= 1; j++) {

        int neighbor_x = x + i;
        int neighbor_y = y + j;

        if (neighbor_x < 0 || neighbor_x >= board.length) {
          // Out of Grid
        }

        if (neighbor_y < 0 || neighbor_y >= board[neighbor_x].length) {
          // Out of Grid
        }

        if (board[neighbor_x][neighbor_y].age == 0) {
            nCount++;
            if (board[x + i][y + j].getPreviousValue() == 0)
                hCount++;
        }

    }
}
4

1 回答 1

0

除非您想执行某些操作,否则您可以简单地将它们排除在外。

越界异常可能发生在 和 的情况下neighbor_x < 0neighbor_y >=0当运行第二个语句时,第一个条件得到验证,第二个条件抛出异常。您可以简单地使用唯一重要的条件

for (int i = -1; i <= 1; i++) {
    for (int j = -1; j <= 1; j++) {

        int neighbor_x = x + i;
        int neighbor_y = y + j;

        if ((neighbor_x >=0 && neighbor_x < board.length) && 
             (neighbor_y >= 0 && neighbor_y < board[neighbor_x].length) &&
             board[neighbor_x][neighbor_y].age == 0 ) {
            nCount++;
            if (board[x + i][y + j].getPreviousValue() == 0)
            hCount++;
        }

     }
}

如果这曾经引发异常,那么只需将条件分开

 if ( neighbor_x >=0 && neighbor_x < board.length )
         if(neighbor_y >= 0 && neighbor_y < board[neighbor_x].length)
                 if(board[neighbor_x][neighbor_y].age == 0 ) 
于 2013-09-21T22:33:29.437 回答