Как исправить вывод на печать при вводе целых чисел - PullRequest
1 голос
/ 06 апреля 2019

Если я введу «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

1 Ответ

3 голосов
/ 06 апреля 2019

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

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, и он будет работать как положено.

...