вывод не может быть отображен при использовании string.format для отображения 2d массива - PullRequest
0 голосов
/ 12 сентября 2018
public class Arr {

    public static void main(String[] args) {
        char[][] arr = new char[4][];
        arr[0] = new char[]{1, 2, 3, 4};
        arr[1] = new char[]{12, 13, 14, 5};
        arr[2] = new char[]{11, 16, 15, 6};
        arr[3] = new char[]{10, 9, 8, 7};
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                System.out.print(String.format("%s", arr[i][j]));
                if (j == 3) {
                    System.out.println();
                }
            }

        }

    }
}

Когда я запускаю программу в Eclipse, вывод будет

Может кто-нибудь помочь найти причину ошибки?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Если вы хотите напечатать фактический символ, вам нужно добавить 48, что равно 0 в ASCII, значения ниже 48 не будут печататься.

http://www.asciitable.com/

Попробуйте это:

System.out.print(arr[i][j] + 0);
0 голосов
/ 12 сентября 2018
System.out.print(String.format("%s", arr[i][j]));

Это напечатает каждый символ в виде строки, используя его значение в Юникоде. Попробуйте сменить %s на %d, если хотите увидеть целочисленный вывод.

В результате получается код:

System.out.print(String.format("%d", (int) arr[i][j]));

Или даже лучше, просто используйте:

System.out.print((int) arr[i][j]);

Это будет печатать целочисленное значение напрямую.

Ваш код печатает эти странные квадраты, поскольку эти целые числа соответствуют этим значениям в юникоде. Взгляните на https://www.ssec.wisc.edu/~tomw/java/unicode.html#x0000, чтобы получить представление о преобразовании юникода, которое использует Java.

...