Вопрос

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

Я получил следующий код:

        int nnames;
    String names[];

    System.out.print("How many names are you going to save: ");
    Scanner in = new Scanner(System.in);
    nnames = in.nextInt();
    names = new String[nnames];

    for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.next();
    }

    System.out.println(names[0]);

Когда я запускаю этот код, сканер распознает только имя, но не фамилию.И иногда он пропускает строку при попытке ввести имя, оно отображается так, как если бы я оставил имя пустым, и переходит к следующему имени.Я не знаю, что является причиной этого.

Я надеюсь, что кто-нибудь сможет мне помочь!

Редактировать:Я пробовал в.nextLine();он исправляет полные имена, но по-прежнему сохраняет строку, вот пример вывода:

How many names are you going to save:  3
Type a name: Type a name: John Doe
Type a name: John Lennon
Это было полезно?

Решение

Вместо того , чтобы:

in.next();

Использование:

in.nextLine();

nextLine() считывает символы до тех пор, пока не найдет символ новой строки '\n'

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

Сканер.следующий прекращает чтение, когда встречает разделитель, который является пробелом.Используйте nextLine метод вместо этого.

После вашего начального nextInt() во входных данных все еще остается пустая новая строка.Так что просто добавьте nextLine() после вашего nextInt(), а затем перейдите в свой цикл:

...
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
in.nextLine(); // gets rid of the newline after number-of-names
names = new String[nnames];

for (int i = 0; i < names.length; i++){
    System.out.print("Type a name: ");
    names[i] = in.nextLine();
}
...

Попробуйте использовать:

System.out.println()

Вместо того , чтобы:

System.out.print()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top