我正在尝试计算我的图块对象数组中的相邻地雷。该代码对于边界内网格的任何部分都适用。我们假设它是一个10 x 10的数组,如果我选择9,8,它将给我一个数组超出范围的异常。我如何确保在不给我ArrayOutOfBounds异常的情况下,阵列将对阵列边缘的相邻地雷进行计数?

void countAdjacentMines(int x,int y) {
        //Iterate through the array check if there is a mine
        for (int i = 0; i < tiles.length; i++) {
            for (int j = 0; j < tiles.length; j++) {
                if ((tiles[i][j].getMine() == false)) {
                    int count = 0;
                    //Search adjacent tiles. at x,y
                    for (int p = x - 1; p <= x + 1; p++) {
                        for (int q = y - 1; q <= y + 1; q++) {

                            if (0 <= p && p < tiles.length && 0 <= q && q < tiles.length) {
                                if (tiles[p][q].getMine()==true)
                                    count++;

                            }
                            tiles[p][q].setCount(count);
                        }
                    }
                }
            } // end for loop rows
        } // end for loop columns
  } // end countAdjacentMines

最佳答案

创建一个功能

int hasMine (int x, int x)

(x,y)拥有地雷时返回1,
如果不是或(x,y)不是有效的单元格,则为0(也很有用
具有boolean valid (int x, int y)功能)。

然后,只需执行以下操作:

totalMines = hasMine(x+1,y+1) + hasMine(x+1, y) + hasMine(x+1, y-1) + .... + hasMine (x-1,y-1) // 8个hasMine()调用。

09-09 20:46