Вопрос

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

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() автоматически перемещает сканер вниз после возврата текущей строки.

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