Вычисление количества мин, окружающих ячейку в массиве 2d JAVA - PullRequest
1 голос
/ 08 января 2020

Привет, так что в основном я пытаюсь сделать версию тральщика для начинающих, но я немного застрял. Я могу добраться до стадии, когда у меня есть двумерный массив символов, в то время как «*» означает мой, а ^ нет. Часть, в которой я застрял, меняет '^' на количество мин, окружающих его, и мой код возвращает 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;
}

Спасибо за помощь:)

1 Ответ

1 голос
/ 08 января 2020

Это потому, что вы преобразуете int из numberofmines() в char, что означает, что вы получаете ASCII-значение . Вы можете добавить 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);

    // ...
}
...