Porque o array de String não mostra o que foi inserido?
4 respostasResolvido
javaprogramação
T
TonyMontana01
Boa noite pessoal, não estou entendendo por qual motivo o que insiro em string não é mostrado no ultimo for, sendo que o de int é mostrado normalmente, desde já agradeço a ajuda.
publicstaticvoidmain(String[]args){Scannerleitor=newScanner(System.in);Stringnome[]=newString[2];intidade[]=newint[2];for(inti=0;i<nome.length;i++){System.out.println("Digite seu nome : ");leitor.next();nome[i]=leitor.nextLine();System.out.println("Digite sua idade : ");idade[i]=leitor.nextInt();}for(inti=0;i<nome.length;i++){System.out.println("Nomes cadastrados: "+nome[i]);System.out.println("Idades cadastradas: "+idade[i]);}}
É esta chamada do next() que está pegando o nome que vc digita. Ele pega o nome e deixa a quebra de linha.
Quando chega nesta linha:
nome[i]=leitor.nextLine();
Tudo o que sobrou foi a quebra de linha. O nextLine exclui a quebra de linha e retorna uma String vazia e é isso que está sendo mostrado no seu segundo for.
Só por curiosidade, quando ele pedir o nome, experimenta colocar nome e sobrenome. Ao invés de escrever só João, usa algo como João Silva. Vc vai ver que no segundo for, vai mostrar apenas o sobrenome.
Isto porque o next() consome o João e o nextLine() fica com o Silva.
Eu entendi sua intenção ao colocar aquele next() isolado, mas, além de ele estar no lugar errado, deveria ser um nextLine() ao invés de next().
Para corrigir, faça isto:
for(inti=0;i<nome.length;i++){System.out.println("Digite seu nome : ");nome[i]=leitor.nextLine();System.out.println("Digite sua idade : ");idade[i]=leitor.nextInt();leitor.nextLine();}
Ou melhor ainda:
for(inti=0;i<nome.length;i++){System.out.println("Digite seu nome : ");nome[i]=leitor.nextLine();System.out.println("Digite sua idade : ");idade[i]=Integer.parseInt(leitor.nextLine());}
T
TonyMontana01
Estavausandooleitor.next();antesdoidade[i]=leitor.nextInt();poisdurantearepetiçãodoforoSystem.out.println("Digite seu nome : ");System.out.println("Digite sua idade : ");estavamvindojuntossemotempodesolicitaroprimeiroeosegundo,apósoidade[i]=Integer.parseInt(leitor.nextLine());quevocêfalouficounormal,masporqualmotivoaconteceisso?Obrigadoportodaaexplicação.
W
wldomiciano2 likes
Eu sei. Por isso eu te disse que entendi sua intenção, mas que vc colocou as coisas na linha errada.
Na verdade eu te dei 2 opções. Uma que usa o nextInt() + nextLine() e outra que usa nextLine() + Integer.parseInt().
Quando vc digita João e pressiona Enter, vc está inserindo os caracteres j, o, ã, o e mais o caracter de nova linha.
O método nextLine() consome a linha toda e a retorna, descartando o caracter de nova linha.
Os métodos next() e nextInt() consomem apenas uma String ou um int e, se encontram um caracter de nova linha, eles o deixam lá, sem consumí-lo, apenas o ignoram.
Quando o loop entra na segunda iteração, o seu nextLine() encontra o caracter de nova linha deixado pelo nextInt da iteração anterior e o consome sem nem pedir para o usuário entrar com a informação.
Na minha primeira sugestão de usar nextInt() + nextLine(), invocar o nextLine() na próxima linha após o nextInt() consome o caracter de nova linha deixado pelo nextInt() e quando o loop começa a segunda iteração, como não há resíduos, o programa funciona como esperado.
Na minha segunda sugestão de usar nextLine() + Integer.parseInt(), nós não temos mais o problema do caracter de nova linha residual, mas precisamos fazer a conversão para int manualmente usando o Integer.parseInt().