Olá pessoal.
Tô com um problema na hora de ler a string 'nome'. Simplesmente ela pula para a leitura da variável 'peso', e não me deixa nem digitar o 'nome'.
Sendo que eu tenho um vetor de Strings.
Segue o código.
Desde já agradeço
for(inti=0;i<qtd_cadastro;i++){System.out.println("\nDigite o nome da pessoa "+(i+1));nome=newString[qtd_cadastro];nome[i]=leia.nextLine();System.out.println("Digite o peso da pessoa "+(i+1));peso=newfloat[qtd_cadastro];peso[i]=leia.nextFloat();System.out.println("Digite a idade da pessoa "+(i+1));idade=newint[qtd_cadastro];idade[i]=leia.nextInt();
você poderia ter colocado o código todo, para dar para saber qual o tipo do seu objeto leia.
Mas tem também um problema nesse código que você fez: está inicializando o array dentro do laço for, dessa forma em cada iteração do laço ele vai criar o array novamente, com todas as posições vazias limpando o dado que você colocou anteriormente.
O correto seria inicializar os arrays com a quantidade de cadastros, e depois iterar sobre ele preenchendo com os dados que o usuário informar.
Stringnome[]=newString[qtd_cadastro];floatpeso[]=newfloat[qtd_cadastro];intidade[]=newint[qtd_cadastro];for(inti=0;i<qtd_cadastro;i++){System.out.println("\nDigite o nome da pessoa "+(i+1));nome[i]=leia.nextLine();System.out.println("Digite o peso da pessoa "+(i+1));peso[i]=leia.nextFloat();System.out.println("Digite a idade da pessoa "+(i+1));idade[i]=leia.nextInt();}
E
elizier
Corrigi o erro que vc apontou e continua dando erro. Segue o código todo.
importjava.util.Scanner;publicclasslista2_exer1{publicstaticvoidmain(String[]Lista2_exer1){intqtd_cadastro,idade[],qtd_1a10=0,qtd_11a20=0,qtd_21a30=0,qtd_maior30=0;floatpeso[],somapeso_1a10=0,somapeso_11a20=0,somapeso_21a30=0,somapeso_maior30=0,mediapeso_1a10,mediapeso_21a30,mediapeso_11a20,mediapeso_maior30;Stringnome[];Scannerleia=newScanner(System.in);System.out.println("Digite quantas pessoas deseja cadastrar:");qtd_cadastro=leia.nextInt();nome=newString[qtd_cadastro];peso=newfloat[qtd_cadastro];idade=newint[qtd_cadastro];for(inti=0;i<qtd_cadastro;i++){System.out.println("\nDigite o nome da pessoa "+(i+1));nome[i]=leia.nextLine();System.out.println("Digite o peso da pessoa "+(i+1));peso[i]=leia.nextFloat();System.out.println("Digite a idade da pessoa "+(i+1));idade[i]=leia.nextInt();if(idade[i]>=1&&idade[i]<=10){qtd_1a10++;somapeso_1a10=somapeso_1a10+peso[i];}elseif(idade[i]>=11&&idade[i]<=20){qtd_11a20++;somapeso_11a20=somapeso_11a20+peso[i];}elseif(idade[i]>=21&&idade[i]<=30){qtd_21a30++;somapeso_21a30=somapeso_21a30+peso[i];}else{qtd_maior30++;somapeso_maior30=somapeso_maior30+peso[i];}}mediapeso_1a10=somapeso_1a10/qtd_1a10;mediapeso_11a20=somapeso_11a20/qtd_1a10;mediapeso_21a30=somapeso_21a30/qtd_21a30;mediapeso_maior30=somapeso_maior30/qtd_maior30;System.out.println("\n***Faixa Etária de 1 a 10 anos:***\n\nMedia do peso: "+mediapeso_1a10+" kg\nQuantidade de "+"pessoas: "+qtd_1a10);System.out.println("\n***Faixa Etária de 11 a 20 anos:***\n\nMedia do peso: "+mediapeso_11a20+" kg\nQuantidade de "+"pessoas: "+qtd_11a20);System.out.println("\n***Faixa Etária de 21 a 30 anos:***\n\nMedia do peso: "+mediapeso_21a30+" kg\nQuantidade de "+"pessoas: "+qtd_21a30);System.out.println("\n***Faixa Etária maior de 30 anos:***\n\nMedia do peso: "+mediapeso_maior30+" kg\nQuantidade de "+"pessoas: "+qtd_maior30);}}
rodpuc
Ele fica lendo lixo que sobra na entrada. Não entendo bem pq isso acontece, se alguém souber explicar direito seria muito legal, mas vc pode solucionar substituindo o inicio do seu for por este:
//...for(inti=0;i<qtd_cadastro;i++){leia.nextLine();System.out.println("\nDigite o nome da pessoa "+(i+1));nome[i]=leia.nextLine();//...
ou seja, o leia.nextLine(); está "limpando" essa sujeira q fica, ignorando ela.
erdanielli
Tem uma explicação boa no JavaRanch, mas é em inglês. Segue link
E
elizier
Rodpuc, fiz o que você indicou e deu certo. Obrigado.
Realmente isso é muito estranho, nem o meu professor da faculdade soube me explicar o por que desse erro.
Valeu aí pessoal pela força.
rodpuc
andei dando uma pesquisada, parece que isso acontece pq vc está lendo o próximo inteiro, só que o usuário, além de escrever um número ele tem que dar um ENTER para validar a entrada. Esse enter é na verdade um caractere (\n), portanto como vc leu apenas o inteiro esse \n vai fica no buffer de entrada. Logo, a sua próxima instrução readLine() vai consumir este \n