Как исправить вывод на печать при вводе целых чисел

Если я ввожу «0», «1», «2» или «3» (в указанном порядке), программа выдает идеальный результат. Если я ввожу целые числа в другом порядке, код работает неправильно. Например, если я сначала выберу «2», мой код ожидает, что я введу целое число три раза, чтобы получить правильный результат. Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю неправильно?

Я пытался использовать операторы else-if, и когда я ввожу что-либо, кроме «0», мне нужно вводить целое число в сумме, равное номеру индекса. Например, если я ввожу «2», мне нужно ввести его три раза, чтобы получить желаемый результат.

System.out.println("Please input a number between zero to 3");

            for (int i = 0; i < 4; i++) {

                if (sc.nextInt() == 0) {
                    System.out.println("You have selected " + right);
                }
                if (sc.nextInt() == 1) {
                    System.out.println("You have selected " + left);
                }
                if (sc.nextInt() == 2) {
                    System.out.println("You have selected " + up);
                }
                if (sc.nextInt() == 3) {
                    System.out.println("You have selected " + down);
                    break;
                }
            }

Мой ожидаемый результат должен быть:

This program simulates the 4 arrows RIGHT, LEFT, UP, DOWN using the numbers 0, 1, 2, 3 respectively
Please input a number between zero to 3
3
You have selected DOWN
1
You have selected LEFT
0
You have selected RIGHT
2
You have selected UP

Process finished with exit code 0

Этот вывод происходит, когда я помещаю их в правильном порядке. Если я начну с ввода «1», это произойдет:

This program simulates the 4 arrows RIGHT, LEFT, UP, DOWN using the numbers 0, 1, 2, 3 respectively
Please input a number between zero to 3
1
1
You have selected LEFT

Вы называете nextInt() в каждом заявлении if. Подумайте о том, что это делает.

Benjamin Urquhart 06.04.2019 20:16

Мое понимание (которое ограничено) заключается в том, что я вызываю nextInt(), потому что я ищу определенный целочисленный ввод от сканера.

darkrabb1t 06.04.2019 20:17

сохранить ввод в переменную: int direction = sc.nextInt(); и выполните проверку if для этой переменной.

MevlütÖzdemir 06.04.2019 20:20
nextInt() потребляет входные данные, которые он возвращает. Если вы вызовете его 4 раза, он будет ожидать 4 целых числа от стандартного ввода.
Benjamin Urquhart 06.04.2019 20:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Измените свою логику на:

for (int i = 0; i < 4; i++) {
    System.out.println("Please input a number between zero to 3");
    // use input and don't advance the scanner every time
    int input = sc.nextInt();

    if (input == 0) {
        System.out.println("You have selected " + right);
    }
    if (input == 1) {
        System.out.println("You have selected " + left);
    }

    // so on and so forth

}

Используя sc.nextInt()четыре раз, вы ищете следующий токен ввода, которого нет. Так что получите входные данные для запуска цикла for каждый, и он будет работать, как и ожидалось.

Кажется, это работает, однако не позволяет мне вводить целые числа 4 раза. Код «сломается» и завершится только после одного ввода.

darkrabb1t 06.04.2019 20:26

Оно делает. Кроме того, это может иметь какое-то отношение к оператору break (в зависимости от ввода какие, который вы вводите.)

Nicholas Kurian 06.04.2019 20:29

Я только что понял, что если я удалю оператор «break», код запустится и завершится после 4 попыток. Спасибо вам за вашу помощь!!

darkrabb1t 06.04.2019 20:30

Другие вопросы по теме