Java Scanner cordas leitura classe
-
13-09-2019 - |
Pergunta
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.nextLine();
}
E a saída para que o código é a seguinte:
How many names are you going to save:3
Type a name: Type a name: John Doe
Type a name: John Lennon
Observe como ele pulou a primeira entrada nome ?? Ele Saltado e foi direto para a segunda entrada de nome. Eu tentei olhar o que provoca isso, mas eu não parecem ser capazes de pregá-lo. Espero que alguém possa me ajudar. Graças
Solução
A razão para o erro é que o nextInt única puxa o inteiro, não a nova linha. Se você adicionar um in.nextLine () antes de seu loop for, ele vai comer a nova linha vazia e permitem que você digite 3 nomes.
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();
}
ou apenas ler a linha e analisar o valor como um inteiro.
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();
}
Outras dicas
uso sc.nextLine (); duas vezes para que possamos ler a última linha de corda
sc.nextLine () sc.nextLine ()
É porque o in.nextInt () não muda de linha. Então você primeiro "enter" (depois de pressionar 3) causa a FimDeLinha lido por seu in.nextLine () em seu loop.
Aqui uma pequena mudança que você pode fazer:
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();
}
Este porque in.nextInt () só recebem um número int, não recebe uma nova linha. Então você entrada 3 e pressione "Enter", o fim da linha é lido por in.nextline ().
Aqui está o meu 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();
in.nextLine();
names = new String[nnames];
for (int i = 0; i < names.length; i++){
System.out.print("Type a name: ");
names[i] = in.nextLine();
}
Você poderia simplesmente ter substituído
names[i] = in.nextLine();
com names[i] = in.next();
Usando next () só irá devolver o que vem antes de um espaço. nextLine () move-se automaticamente o scanner para baixo depois de voltar da linha atual.