所以,如果选择的地点没有地雷,我就计算附近地雷的数量,这就是我想出的:
public static int numNearbyMines( boolean [][]mines, int row, int col) {
int nearbyMines = 0;
if (mines[row - 1][col] == true) { nearbyMines += 1; }
if (mines[row - 1][col - 1] == true) { nearbyMines += 1; }
if (mines[row - 1][col + 1] == true) { nearbyMines += 1; }
if (mines[row][col + 1] == true) { nearbyMines += 1; }
if (mines[row][col - 1] == true) { nearbyMines += 1; }
if (mines[row + 1][col] == true) { nearbyMines += 1; }
if (mines[row + 1][col - 1] == true) { nearbyMines += 1; }
if (mines[row + 1][col + 1] == true) { nearbyMines += 1; }
return nearbyMines;
}
然而,我意识到这种方法不起作用,因为如果我选择了一个角落之类的地方,它将在数组之外“读取”,因此无法正常工作。我如何改变这一点,即使我选择了一个角落,它也只会在数组内部读取?
答案 0 :(得分:2)
我对此类问题的解决方案是创建一个安全读取数组的函数。 例如:
boolean readMines(int x, int y) {
if(x >= 0 && x < mines.length && y >= 0 && y < mines[0].length) {
return mines[x][y];
}
return false;
}
这将检查以确保在阅读之前阅读您提供的索引是安全的,并假设在无法读取的地方没有地雷。它应该适合您的需要。
答案 1 :(得分:0)
如果地址(如[row-1] [col])是有效的(在边界内),您可以添加一个检查。此检查最好通过以下方法完成:
boolean isValid(int x, int y) {
if(x >= 0 && x < mines.length && y >= 0 && y < mines[0].length) {
return true;
}
return false;
}