【问题标题】:Calculating number of mines surrounding a cell in 2d array JAVA计算二维数组JAVA中单元格周围的地雷数量
【发布时间】:2020-04-25 18:19:41
【问题描述】:

嗨,基本上我正在尝试制作扫雷的初学者版本,但我有点卡住了。 我能够进入我有一个 2d 字符数组的阶段,而'*' 表示我的,而 ^ 没有。我被卡住的部分是用围绕它的地雷数量来改变“^”,我的代码所做的是返回一个二维数组,但不是数字,而是奇怪的问号。

这是我的功能。

static char[][] calculatemines(char[][] h) {
    int height = h.length;
    int width = h[0].length;

    char[][] newh = new char[height][width];
    for (int i = 0; i < newh.length; i++) {
        for (int j = 0; j < newh[0].length; j++) {
            if(h[i][j]=='*') {
                newh[i][j]='*';
            } else
                newh[i][j]= (char) numberofmines(h,height,width);
        }
    }

    return newh;
}

这是第二个功能

private static int numberofmines(char[][] f, int height, int width) {

    int numberofmines = 0;

    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {

            int iStart = Math.max(0, i - 1);
            int iEnd = Math.min(height, i + 1);

            int jStart = Math.max(0, j - 1);
            int jEnd = Math.min(width, j + 1);

            for (int squareI = iStart; squareI < iEnd; squareI++) {
                for (int squareJ = jStart; squareJ < jEnd; squareJ++) {
                    if (f[squareI][squareJ] == '*') {
                        numberofmines++;
                    }
                }
            }
        }
    }

    return numberofmines;
}

感谢大家的帮助:)

【问题讨论】:

  • 您正在投射一个整数,例如5 到一个字符 - 这将是它的 ascii 值。有关更多信息,请参阅 asciitable。通常每当你在施法时,你都做错了。

标签: java arrays char 2d minesweeper


【解决方案1】:

这是因为您将 int 从 numberofmines() 转换为 char,这意味着您将获得 ASCII value。可以加48('0'的ASCII值为48)得到原来的数字

newh[i][j] = (char)(numberofmines(h,height,width) + 48);

编辑:

您无需遍历numberofmines() 中的所有数组,只需遍历周围的单元格即可

else {
    newh[i][j] = (char)(numberofmines(h, h.length, h[0].length, i, j) + 48);
}

private static int numberofmines(char[][] f, int height, int width, int i, int j) {
    int iStart = Math.max(0, i - 1);
    int iEnd = Math.min(height, i + 2);

    int jStart = Math.max(0, j - 1);
    int jEnd = Math.min(width, j + 2);

    // ...
}

【讨论】:

  • 或添加字符'0'
  • 仍然无法正常工作,现在我收到了一封信,但所有非我的单元格都收到了相同的信
  • numberofmines(h,height,width); - 这些变量的值不会改变,所以我猜你会得到相同的结果
  • 用 i 改变高度和用 j 改变宽度,但现在我得到了错误的数字。
  • 行:5 列:5 输入有效 P 0.2 0 0 0 0 0 * 0 * * 0 0 1 2 3 5 0 2 4 6 : 0 * 4 6 :
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
相关资源
最近更新 更多