Использование scanner.nextLine () [duplicate]

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

У меня возникли проблемы при попытке использовать метод 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: Этот пример работает как задумано. Строка Строковое предложение = scanner.nextLine (); ожидает ввода данных, прежде чем перейти к System.out.print («Введите индекс: \ 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 предложение = scanner.nextLine (); , она не ждет ввода, а вместо этого выполняет строку System.out.print («Введите индекс: \ t») ; .

Это дает результат:

Menu Options

(1) - do this
(2) - quit

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

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


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

91
задан Eric Leschinski 13 April 2015 в 06:16
поделиться