Подтвердить что ты не робот

Строки чтения классов Java Scanner

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

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

Обратите внимание, как он пропустил запись первого имени? Он пропустил его и пошел прямо во вторую запись. Я попытался посмотреть, что вызывает это, но я, похоже, не могу прибить его. Я надеюсь, что кто-то может мне помочь. Благодаря

4b9b3361

Ответ 1

Причиной ошибки является то, что 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();
}

Ответ 2

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

sc.nextLine() sc.nextLine()

Ответ 3

Это потому, что in.nextInt() не меняет строку. Итак, вы сначала "enter" (после нажатия 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();
    }

Ответ 4

Это потому, что in.nextInt() получает только номер int, не получает новую строку. Таким образом, вы вводите 3 и нажимаете "Enter", конец строки считывается 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();
}

Ответ 5

Вы могли бы просто заменить

names[i] = in.nextLine(); с names[i] = in.next();

Использование next() возвращает только то, что приходит перед пробелом. nextLine() автоматически перемещает сканер вниз после возврата текущей строки.