0

我需要为我的项目制作一个简单(标准)的扫雷器。我想检查二维数组的随机(或特定)元素的周围元素。

假设我有一个这样的数组

boolean board[5][5]

我想检查周围的元素

board[0][0]

我写道:

    public int numberChecker(int h, int w) {
    int checker = 0;        
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            int he = h - 1 + i;
            int wi = w - 1 + i;    <---- this i should be j that was the issue
            if (board.getHeight() > he && he >= 0 
                               && wi >= 0 && board.getWidth() > wi) {
            if (boomChecker(he, wi)) {
                if (w != (wi) && h != (he)) {
                    checker++;
                }
                }
            }
        }
    }                                   

    return checker;
}

问题是我认为它只检查“\”方式(不知道如何表达)

前任:

(输出 # 表示未发现的数字表示周围的地雷)

揭开 4-2

######
######
0#####
#0####
##0###     <-- unlocking this one
###0##

或者

揭开 0-0

0#####
#0####
##0###
######     <-- there is a mine at check spot
######
######

代码本身并不重要(我知道我解释自己有点复杂)

我需要的是一个工作环境检查循环(或任何东西)

提前致谢

问题解决了简单的愚蠢错误 int he = h - 1 + i; int wi = w - 1 + i; <--- 我应该是 j 谢谢

4

3 回答 3

3

我认为您的错误在于以下两行:

int he = h - 1 + i;
int wi = w - 1 + i;

您将 i 的值添加到高度和宽度。因此,您只需检查 3 个对角线字段中的每一个 3 次。我认为应该是

int he = h - 1 + i;
int wi = w - 1 + j;

所以你真的遍历了所有 9 个可能的字段,而不仅仅是对角线。

希望有帮助!

于 2012-07-10T21:56:25.567 回答
0

顺便说一句,您最好明确检查 8 个可能的周围单元格中的每一个。JVM 完全有可能会自动展开您的循环,但我不明白您为什么不直接检查它们。它会更快,更容易理解。

boolean upleft = board[row-1][column-1];
boolean up = board[row-1][column];
boolean upright = board[row-1][column+1];
boolean left = board[row][column-1];
boolean right = board[row][column+1];
boolean downleft = board[row+1][column-1];
boolean dow  = board[row+1][column];
boolean downright = board[row+1][column+1];

当然,您必须检查您是否在棋盘边缘,但这对于发生的事情更有意义。

于 2012-07-11T01:23:47.000 回答
0

我要写我的答案,就像回答家庭作业问题一样

现在您真正应该做的是,对于阵列中的每个单元格,还有 8 个其他单元格要检查。所以像:

count += board[i-1][j-1] ? 1 : 0;
count += board[i-1][j] ? 1 : 0;
count += board[i-1][j+1] ? 1 : 0;
count += board[i][j-1] ? 1 : 0;
etc.

一定要包含一些机制来防止你访问数组边界之外的元素。

另外,如果您想知道?and的:含义,请查看三元运算符 ,它在各种情况下都很有用。

于 2012-07-10T21:59:31.857 回答