Неверно отрабатывает switch

112
25 марта 2021, 13:50

Вот код:

char side;
char left = '\u2190';
char up = '\u2191';
char right = '\u2192';
char down = '\u2193';
do {
side = (char) System.in.read();
switch (side) {
    case 'L':
        System.out.println(left);
        break;
    case 'U':
        System.out.println(up);
        break;
    case 'R':
        System.out.println(right);
        break;
    case 'D':
        System.out.println(down);
        break;
    default:
        System.out.println("Неверное значение");
        break;
} while (side != 'Q');

Когда ввожу значение, которое есть в case выводит стрелочку, а потом "Неверное значение", где ошибка?

Answer 1

После ввода символа вы жмёте клавишу Enter, System.in.read() расценивает это как еще один символ. Также эта функция вызывает исключение IOException, которое нужно обработать.

В таком случае лучше использовать класс Scanner. Вот код программы:

char side;
char left = '\u2190';
char up = '\u2191';
char right = '\u2192';
char down = '\u2193';
Scanner scanner = new Scanner(System.in);
do {
    side = scanner.next().charAt(0);
    switch (side) {
        case 'L':
            System.out.println(left);
            break;
        case 'U':
            System.out.println(up);
            break;
        case 'R':
            System.out.println(right);
            break;
        case 'D':
            System.out.println(down);
            break;
        default:
            System.out.println("Неверное значение");
        break;
    }
} while (side != 'Q');

Если вам всё-таки нужно использовать System.in.read(), то после этого вызовите функцию System.in.skip(1) Т. е.:

side = (char) System.in.read();
System.in.skip(1);
READ ALSO
Как добавить кнопку слева в actionbar

Как добавить кнопку слева в actionbar

Как добавить кнопку слева в actionbar?

120
Как лучше всего ожидать выполнения некоторого условия?

Как лучше всего ожидать выполнения некоторого условия?

Предположим, что я ожидаю выполнения некоторого условия A, как тогда это лучше всего реализовать? У меня на уме 2 варианта, но не знаю, какой...

120