Класс Java Scanner, считывающий строки
-
13-09-2019 - |
Вопрос
Я получил следующий код:
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.nextLine();
}
И результат для этого кода следующий:
How many names are you going to save:3
Type a name: Type a name: John Doe
Type a name: John Lennon
Заметили, как в нем пропущен ввод первого имени??Он пропустил это и сразу перешел ко второй записи имени.Я пытался выяснить, что является причиной этого, но, похоже, мне не удается это выяснить.Я надеюсь, что кто-нибудь сможет мне помочь.Спасибо
Решение
Причина ошибки в том, что nextInt извлекает только целое число, а не новую строку.Если вы добавите in.nextLine() перед циклом for, он съест пустую новую строку и позволит вам ввести 3 имени.
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];
in.nextLine();
for (int i = 0; i < names.length; i++){
System.out.print("Type a name: ");
names[i] = in.nextLine();
}
или просто прочитайте строку и проанализируйте значение как целое число.
int nnames;
String names[];
System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = Integer.parseInt(in.nextLine().trim());
names = new String[nnames];
for (int i = 0; i < names.length; i++){
System.out.print("Type a name: ");
names[i] = in.nextLine();
}
Другие советы
используйте sc.nextLine();два раза, чтобы мы могли прочитать последнюю строку string
sc.nextLine() sc.nextLine()
Это потому, что in.nextInt() не меняет строку.Итак, вы сначала «вводите» (после нажатия 3 ) вызываете, что endOfLine читается вашим in.nextLine() в вашем цикле.
Вот небольшое изменение, которое вы можете сделать:
int nnames;
String names[];
System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = Integer.parseInt(in.nextLine());
names = new String[nnames];
for (int i = 0; i < names.length; i++){
System.out.print("Type a name: ");
names[i] = in.nextLine();
}
Это потому, что in.nextInt() получает только целое число и не получает новую строку.Итак, вы вводите 3 и нажимаете «Ввод», конец строки считывается in.nextline().
Вот мой код:
int nnames;
String names[];
System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
in.nextLine();
names = new String[nnames];
for (int i = 0; i < names.length; i++){
System.out.print("Type a name: ");
names[i] = in.nextLine();
}
Вы могли бы просто заменить
names[i] = in.nextLine();
с names[i] = in.next();
Использование next() вернет только то, что идет перед пробелом.nextLine() автоматически перемещает сканер вниз после возврата текущей строки.