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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top