printf символа UTF-8 с отступом - PullRequest
0 голосов
/ 17 мая 2018

Я пишу текстовый интерфейс тральщика как домашнее задание для университетского проекта. Я хотел попробовать использовать этот символ Юникода ⚑ (U + 2691) в качестве флага для обозначения мин, и это работает, иногда ... это результат. Когда есть один флаг, матрица имеет хороший отступ, но когда два флага находятся рядом, это как если бы промежутки между ними были меньше. Я почти уверен, что консоль после печати флага продолжает использовать другую кодировку, пока не встретит другой тип (целое число в моем случае). В любом случае, я новичок в Java и неопытен.

Два отдельных флага и два смежных флага: image

У меня есть две матрицы: поле, которое содержит все бомбы и числа рядом с ними, и состояние, которое сообщает, была ли ячейка уже обнаружена или нет: в частности, если ячейка в матрице состояний == 0 , он доступен, если == 1, он уже обнаружен, а если == 2, это означает, что пользователь поставил флаг в этой ячейке. Оставляя в стороне код для генерации матрицы, рекурсивный метод для обнаружения всех смежных нулей и методы, которые перечисляют строки и столбцы матрицы, это интересная часть кода:

public class Minesweeper {

    //possible initial configuration
    private int [][] state = new int [10][10];
    private int [][] field = {  
        { 0, 1,-1,-1, 1, 0, 1, 1, 1, 0},
        { 0, 1, 2, 2, 1, 0, 1,-1, 1, 0},
        { 0, 1, 2, 3, 2, 1, 1, 1, 2, 1},
        { 0, 1,-1,-1,-1, 1, 0, 0, 2,-1},
        { 0, 1, 2, 3, 2, 1, 0, 0, 1,-1},
        { 0, 0, 0, 0, 1, 1, 2, 1, 3, 2},
        { 0, 0, 0, 0, 1,-1, 2,-1, 2,-1},
        { 1, 2, 1, 0, 1, 1, 3,-1, 2, 1},
        {-1, 3,-1, 2, 1, 2, 2, 2, 1, 0},
        {-1, 3, 1, 2,-1, 2,-1, 0, 0, 0}};

    public void printField() {

        String FLAG = "⚑";  //or "⚐"

        for (int row = 0; row < field.length; row++) {

            for (int col = 0; col < field[row].length; col++) {
                if (state[row][col] == 0)
                    System.out.printf("%4c", '-');
                if (state[row][col] == 1 && field[row][col] != -1)
                    System.out.printf("%4d", field[row][col]);
                if (field[row][col] == -1 && state[row][col] == 1)
                    System.err.printf("%4c", '*');
                if (state[row][col] == 2) {
                    System.err.printf("%4c" , FLAG);
                }
            }
            System.out.println();
        }

    }

    public static void main (String [] args) {
        Minesweeper campo = new Minesweeper ();
        campo.printField();
    }
}

1 Ответ

0 голосов
/ 17 мая 2018

Кажется, работает просто отлично, если вы используете символы и значение Юникода для флага \u2691 ( См. Здесь )

Вот упрощенная версия:

private static int [][] field = {
    { 0, 1,-1,-1, 1, 0, 1, 1, 1, 0},
    { 0, 1, 2, 2, 1, 0, 1,-1, 1, 0},
    { 0, 1, 2, 3, 2, 1, 1, 1, 2, 1},
    { 0, 1,-1,-1,-1, 1, 0, 0, 2,-1},
    { 0, 1, 2, 3, 2, 1, 0, 0, 1,-1},
    { 0, 0, 0, 0, 1, 1, 2, 1, 3, 2},
    { 0, 0, 0, 0, 1,-1, 2,-1, 2,-1},
    { 1, 2, 1, 0, 1, 1, 3,-1, 2, 1},
    {-1, 3,-1, 2, 1, 2, 2, 2, 1, 0},
    {-1, 3, 1, 2,-1, 2,-1, 0, 0, 0}};

    public static void main (String[] args) {

    Character FLAG = '\u2691';

    for (int row = 0; row < field.length; row++) {
        for (int col = 0; col < field[row].length; col++) {
            int f = field[row][col];
            char c = '-';
            if (f == 1)
                c = Character.forDigit(f, 10);
            else if (f == -1)
                c = '*';
            else if (f == 2) {
                c = FLAG;
            }
            System.out.printf("%4c" , c);
        }
        System.out.println();
    }
}

Я получаю это:

   -   1   *   *   1   -   1   1   1   -
   -   1   ⚑   ⚑   1   -   1   *   1   -
   -   1   ⚑   -   ⚑   1   1   1   ⚑   1
   -   1   *   *   *   1   -   -   ⚑   *
   -   1   ⚑   -   ⚑   1   -   -   1   *
   -   -   -   -   1   1   ⚑   1   -   ⚑
   -   -   -   -   1   *   ⚑   *   ⚑   *
   1   ⚑   1   -   1   1   -   *   ⚑   1
   *   -   *   ⚑   1   ⚑   ⚑   ⚑   1   -
   *   -   1   ⚑   *   ⚑   *   -   -   -

Я запустил его на Linux. В консоли IntelliJ и на терминале оба отпечатка имеют хороший отступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...