Класс Java Scanner, считывающий строки [дубликат]
-
13-09-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
- Класс Java Scanner, считывающий строки 5 ответов
Я получил следующий код:
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()