为什么我无法检测到接触"B"(Java 扫雷)的瓷砖数量?



我正在制作Java扫雷作为一个简单的项目,但程序永远不能计算正确的炸弹数量。这是我写的函数numFunction(),它找到触摸x和y线的所有可能组合,并在所有这些组合上进行迭代。注意,我在这里使用了try/catch来消除任何索引错误:

public static int numTouching(int x, int y){
int n=0;
//define every possible coordinate touching the bomb 
//iterate through the lists of coordinates to count the number of touching bombs
int[]xCords = {x-1, x, x+1};
int[]yCords = {y-1, y, y+1};        
if(board[x][y] != "B"){
try{
for(int i=0; i<xCords.length; i++){
for(int j=0; j<yCords.length; j++){
int xPos = xCords[i];
int yPos= yCords[j];
if(board[xPos][yPos]=="B" && board[xPos][yPos]!=board[x][y]){
n++;
board[x][y]=n;
}
}
}

}
catch(Exception e){}
}
return n;
}

下面是这个程序的输出示例(我想让所有接触B的元素都被设置为1):

Column count = 3
0   0   0   
0   B   0   
0   1   1   
Num touching (0,1): 0
Num touching (1,0): 0
0   0   0   
0   B   0   
0   1   1

奇怪的是,它根据xcord和ycord中元素的顺序而变化(似乎每个数组只有前两个值重要)。例如,如果xcord = {x, x-1, x+1},并且ycord = {y, y-1, y+1},则示例输出如下:

Column count = 3
0   0   0   
0   B   1   
0   1   0   
Num touching (0,1): 0
Num touching (1,0): 0
0   0   0   
0   B   1   
0   1   0   

提前感谢。

您的问题是由于java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds,您无法看到,因为您没有在catch语句中打印异常。请在您的catch语句中添加e.printStackTrace();以查看此操作。

所有你需要做的就是检查你的索引是否有效,下面的代码放在你的=="B"检查对我来说是有效的(也正如Holger所说,你应该使用.equals("B")而不是=="B")

if (xPos < 0 || yPos < 0 || xPos >= board.length || yPos >= board[0].length) {
continue;
}

相关内容

  • 没有找到相关文章

最新更新