Pergunta

Esta questão já tem uma resposta aqui:

Eu tenho o seguinte código:

        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]);

Quando eu executar esse código, o scanner só vai pegar o primeiro nome e não o último nome. E, às vezes, pular uma linha ao tentar inserir um nome, ele vai aparecer como se eu tivesse deixado o nome em branco e pular para o próximo nome. Eu não sei o que está causando isso.

Espero que alguém possa me ajudar!

EDIT: Eu tentei in.nextLine (); que corrige os nomes completos, mas ainda mantém uma linha, aqui está um exemplo da saída:

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

Solução

Em vez de:

in.next();

Use:

in.nextLine();

nextLine() lê os caracteres até encontrar um novo '\n' caractere de linha

Outras dicas

Scanner .next pára de leitura quando encontra um delimitador, que é um espaço em branco. Use o método nextLine vez.

Depois de sua nextInt inicial (), ainda há uma nova linha vazia em sua entrada. Então, basta adicionar um nextLine () após o seu nextInt () e, em seguida, entrar em seu loop:

...
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();
}
...

Tente usar:

System.out.println()

Em vez de:

System.out.print()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top