Использование сканера.nextLine () [дубликат]

На этот вопрос уже есть ответ:

Scanner пропускает nextLine () после использования next () или nextFoo ()? 15 ответов

У меня возникли проблемы при попытке использовать метод nextLine () из java.util.Scanner.

Вот что я пытался:

import java.util.Scanner;

class TestRevised {
    public void menu() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Enter a sentence:\t");
        String sentence = scanner.nextLine();

        System.out.print("Enter an index:\t");
        int index = scanner.nextInt();

        System.out.println("\nYour sentence:\t" + sentence);
        System.out.println("Your index:\t" + index);
    }
}

Пример №1: Этот пример работает как задумано. ЛинияString sentence = scanner.nextLine(); ожидает ввода, прежде чем перейти кSystem.out.print("Enter an index:\t");.

Это производит вывод:

Enter a sentence:   Hello.
Enter an index: 0

Your sentence:  Hello.
Your index: 0
// Example #2
import java.util.Scanner;

class Test {
    public void menu() {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("\nMenu Options\n");
            System.out.println("(1) - do this");
            System.out.println("(2) - quit");

            System.out.print("Please enter your selection:\t");
            int selection = scanner.nextInt();

            if (selection == 1) {
                System.out.print("Enter a sentence:\t");
                String sentence = scanner.nextLine();

                System.out.print("Enter an index:\t");
                int index = scanner.nextInt();

                System.out.println("\nYour sentence:\t" + sentence);
                System.out.println("Your index:\t" + index);
            }
            else if (selection == 2) {
                break;
            }
        }
    }
}

Пример № 2: Этот пример не работает как задумано. В этом примере используется цикл while и структура if-else, позволяющая пользователю выбирать, что делать. Как только программа доберется доString sentence = scanner.nextLine();, он не ждет ввода, а выполняет строкуSystem.out.print("Enter an index:\t");.

Это производит вывод:

Menu Options

(1) - do this
(2) - quit

Please enter your selection:    1
Enter a sentence:   Enter an index: 

Что делает невозможным ввод предложения.

Почему пример № 2 не работает как задумано? Единственная разница между Ex. 1 и 2 - это пример 2 имеет цикл while и структуру if-else. Я не понимаю, почему это влияет на поведение scanner.nextInt ().

Ответы на вопрос(5)

Ваш ответ на вопрос