Строки чтения класса Java Scanner [дубликаты]

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

Строки чтения классов 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]);

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

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

РЕДАКТИРОВАТЬ: я пробовал in.nextLine (); он исправляет полные имена, но сохраняет строку, вот пример вывода:

How many names are you going to save:  3
Type a name: Type a name: John Doe
Type a name: John Lennon