我正在尝试计算我的图块对象数组中的相邻地雷。该代码对于边界内网格的任何部分都适用。我们假设它是一个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()调用。