【问题标题】:Minesweeper Counting Mines not working扫雷计数地雷不起作用
【发布时间】:2023-04-10 03:01:01
【问题描述】:

所以,我正在计算附近地雷的数量,假设所选地点没有地雷,这就是我想出的:

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;
}

但是,我意识到这种方法行不通,因为如果我选择角落等地方,它将在数组之外“读取”,因此无法正常工作。我将如何更改它,以便即使我选择了一个角落,它也只会在数组内部读取?

【问题讨论】:

  • 您需要检查地址(如 [row-1][col])是否有效(在范围内)。这种检查最好在方法中完成。

标签: java minesweeper


【解决方案1】:

我对这类问题的解决方案是创建一个函数来安全地读取数组。 示例:

boolean readMines(int x, int y) {
    if(x >= 0 && x < mines.length && y >= 0 && y < mines[0].length) {
        return mines[x][y];
    }
    return false;
}

这会检查以确保在阅读前按照您提供的索引进行阅读是安全的,并假设在无法阅读的地方没有地雷。它应该可以满足您的需求。

【讨论】:

  • 这应该是一种新方法吗?还是按照我上面放的方法实现的?
  • @BrianKang 这应该是代码中某处的一个新方法,您可以调用它而不是直接从数组中读取。旁注:您不需要在带有布尔值的 if 语句上加上“== true”。
  • 这个想法很好。代码是错误的。它不会编译。
  • @c0der 有什么错误?我看不出有什么问题,但也许我只是累了。
  • 测试它,发布前编译它。 return mines[x][y]; 应该是 return true; 。还要更改方法的名称。
【解决方案2】:

您可以添加检查地址(如 [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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多