С помощью сканера.строки() [дубликат]


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

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

вот что я пробовал:

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 Optionsn");
            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 не работает должным образом? Единственная разница между бывшими. 1 и 2-это экс. 2 имеет цикл while и структуру if-else. Я не понимаю, почему это влияет на поведение сканера.nextInt().

5 82

5 ответов:

Я думаю, что ваша проблема в том, что

int selection = scanner.nextInt();

читает просто число, а не конец строки или что-нибудь после номера. Когда вы объявляете

String sentence = scanner.nextLine();

это читает остаток строки с номером на нем (ничего после числа я подозреваю)

попробуйте установить сканер.nextLine (); после каждого nextInt (), если вы собираетесь игнорировать остальную часть строки.

вместо того, чтобы поместить дополнительную scanner.nextLine() каждый раз, когда вы хотите что-то прочитать, поскольку кажется, что вы хотите принять каждый ввод в новой строке, вы можете вместо этого изменить разделитель, чтобы фактически соответствовать только новым строкам (вместо любых пробелов, как по умолчанию)

import java.util.Scanner;

class ScannerTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        scanner.useDelimiter("\n");

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

        System.out.print("Enter a sentence: ");
        String sentence = scanner.next();

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

таким образом, чтобы прочитать строку ввода, вам нужно только scanner.next() это имеет тот же разделитель поведения next{Int, Double, ...}

разница с" nextLine() каждый раз " подход, разве что последний примет, как индекс также <space>3,3<space> и 3<space>whatever в то время как первый принимает только 3 на линию

Не пытайтесь сканировать текст с помощью nextLine (); после использования nextInt () с тем же сканером! Это не очень хорошо работает с Java Scanner, и многие разработчики Java предпочитают просто использовать другой сканер для целых чисел. Вы можете вызвать эти сканеры scan1 и scan2, если хотите.

это потому, что когда вы вводите номер, то нажмите Enter,input.nextInt() потребляет только число, а не "конец строки". Примитивные типы данных, такие как int, double и т. д., не потребляют "конец строки", поэтому "конец строки" остается в буфере и когда input.next() выполняется, он потребляет "конец строки" из буфера с первого входа. Вот почему, ваш String sentence = scanner.next() только потребляет "конец строки" и не ждет, чтобы читать с клавиатуры.

Совет: использовать scanner.nextLine() вместо scanner.next(), потому что scanner.next() не считывает пробелы с клавиатуры. (Усечь строку после предоставления некоторого пространства с клавиатуры, только показать строку перед пробелом.)

или

int selection = Integer.parseInt(scanner.nextLine());