Странный вывод Java-Hangman ASCII Art

Я начинаю делать игру про палача на Java.
Я хочу иметь возможность вызывать состояния своего метода в зависимости от того, неправильно ли пользователь ввел символ или нет.
Я тестирую все состояния, чтобы убедиться, что они отображаются правильно.
Состояния 1 и 2 отображаются правильно, но не 3-5.

Вот код:

public void state_1() {
        System.out.println(" \n"
                + " ------\n"
                + "|      |\n"
                + "|      O\n"
                + "|\n"
                + "|\n"
                + "|\n"
                + "|\n"
                + "|\n"
                + "|\n"
                + "|");
        System.out.println("\n"
                + "");
    }
    public void state_2() {
        System.out.println(" \n"
                + " ------\n"
                + "|      |\n"
                + "|      O\n"
                + "|      |\n"
                + "|      |\n"
                + "|      |\n"
                + "|\n"
                + "|\n"
                + "|\n"
                + "|");
        System.out.println("\n"
                + "");
    }
    public void state_3() {
        System.out.println(" \n"
                + " ------\n"
                + "|      |\n"
                + "|      O\n"
                + "|      |\n"
                + "|      |\n"
                + "|      |\n"
                + "|      |\n"
                + "|     / \\n"
                + "|    /   \\n"
                + "|   /     \\");
        System.out.println("\n"
                + "");
    }
    public void state_4() {
        System.out.println(" \n"
                + " ------\n"
                + "|      |\n"
                + "|      O  /\n"
                + "|      | /\n"
                + "|      |/\n"
                + "|      |\n"
                + "|      |\n"
                + "|     / \\n"
                + "|    /   \\n"
                + "|   /     \\");
        System.out.println("\n"
                + "");
    }
    public void state_5() {
        System.out.println(" \n"
                + " ------\n"
                + "|      |\n"
                + "|   \\  O  /\n"
                + "|    \\ | /\n"
                + "|     \\|/\n"
                + "|      |\n"
                + "|      |\n"
                + "|     / \\n"
                + "|    /   \\n"
                + "|   /     \\");
        System.out.println("\n"
                + "");
    }

Вот странный вывод:

 ------
|      |
|      O
|
|
|
|
|
|
|



 ------
|      |
|      O
|      |
|      |
|      |
|
|
|
|



 ------
|      |
|      O
|      |
|      |
|      |
|      |
|     / \n|    /   \n|   /     \



 ------
|      |
|      O  /
|      | /
|      |/
|      |
|      |
|     / \n|    /   \n|   /     \



 ------
|      |
|   \  O  /
|    \ | /
|     \|/
|      |
|      |
|     / \n|    /   \n|   /     \

Я уверен, что есть что-то простое, но я просто не уверен, так как знаю, что у него проблема с частью \ до создания новой строки "\n".
Как обойти это, я нужна ваша помощь с.


person Bob G.    schedule 02.11.2017    source источник


Ответы (1)


"\\n" делает литерал \n в печатном выводе.

Если вы хотите \ и новую строку, то есть "\\\n", где вы избегаете косой черты, поместите новую строку.

Вы также можете просто println() каждую строку по отдельности. Тем не менее, нужно избегать обратной косой черты

    System.out.println();
    System.out.println(" ------ ");
    System.out.println("|      |");
    System.out.println("|      O");
    ...
    System.out.println("|    /   \\");
    System.out.println("|   /     \\");
person OneCricketeer    schedule 02.11.2017
comment
Я знаю, что вы можете просто делать system.out.println каждый раз, я просто подумал, что, может быть, есть лучший способ сделать это так, как я это делал. Когда я пробую это с \\\n, это просто дает мне недопустимую последовательность. Это то, чего я пытался избежать, и я поставил \\ для ног, чтобы решить эту проблему. Так что я могу исправить это, просто каждый раз выполняя system.out.println? - person Bob G.; 02.11.2017
comment
Это не исправление. Это нужно, чтобы удалить \n в конце строки и гарантировать, где у вас есть новые строки. - person OneCricketeer; 02.11.2017
comment
Когда я ставлю \ перед | часть тела палача, где я получаю неверную последовательность. Однако я неправильно истолковал ваш комментарий как исправление. Так есть ли способ сделать это так, как я это делаю? Или это единственный способ? - person Bob G.; 02.11.2017
comment
Это обходной путь, а не исправление. Вы видели ссылку выше? Кроме того, обратная косая черта сама по себе является недопустимой последовательностью. Вам всегда нужны два символа с любой обратной косой чертой. stackoverflow.com/questions/ 1367322/ - person OneCricketeer; 02.11.2017
comment
Я видел код выше, но работает ли он и для рук? В потоке стека, который вы предоставили, я попробовал b как единственный, который имел смысл вводить, и он вроде сработал, но дал мне поле с? эффективно заменяет символ /. - person Bob G.; 02.11.2017
comment
Косые черты не нужно экранировать. Только левая рука и правая нога нуждаются в двойной обратной косой черте. Правая нога нуждается в двух косых чертах плюс новая строка. Я запутался, что вы не понимаете - person OneCricketeer; 02.11.2017
comment
Хорошо, этот комментарий помог, поскольку в нем три обратных косых черты плюс символ n. Я думал, что под новой строкой вы имели в виду только n, так что всего 2 обратных косых черты. Под новой строкой вы имели в виду \n. В любом случае, я заставил работать последний, так что теперь я могу заставить работать остальные, просто нужно сделать это на других этапах, что необходимо сделать. Спасибо за помощь. - person Bob G.; 02.11.2017