Erros na leitura de uma String //nextLine()

7 respostas
E

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 (int i=0; i<qtd_cadastro; i++){
         System.out.println ("\nDigite o nome da pessoa "+(i+1));		
nome=new String[qtd_cadastro];    	
nome[i]=leia.nextLine();
			
System.out.println ("Digite o peso da pessoa "+(i+1));
peso=new float[qtd_cadastro];
peso[i]=leia.nextFloat();
			
System.out.println("Digite a idade da pessoa "+(i+1));
idade=new int[qtd_cadastro];
idade[i]=leia.nextInt();

7 Respostas

Ana.Pandini

Olá,

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.

String nome[] = new String[qtd_cadastro];
float peso[] = new float[qtd_cadastro];
int idade[] = new int[qtd_cadastro];

for (int i = 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

Corrigi o erro que vc apontou e continua dando erro. Segue o código todo.

import java.util.Scanner;
public class lista2_exer1 {
	public static void main (String[] Lista2_exer1){
		int qtd_cadastro, idade[], qtd_1a10=0, qtd_11a20=0, qtd_21a30=0, qtd_maior30=0;
		float peso[], somapeso_1a10=0, somapeso_11a20=0, somapeso_21a30=0, somapeso_maior30=0,
		mediapeso_1a10, mediapeso_21a30, mediapeso_11a20, mediapeso_maior30;
		String nome[];
		
		
		Scanner leia=new Scanner(System.in);
				
		System.out.println("Digite quantas pessoas deseja cadastrar:");
		qtd_cadastro=leia.nextInt();
				
		nome=new String[qtd_cadastro]; 
		peso=new float[qtd_cadastro];
		idade=new int[qtd_cadastro];
		
		for (int i=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];
		    }
				else if(idade[i]>=11 && idade[i]<=20){
					qtd_11a20++;
					somapeso_11a20=somapeso_11a20+peso[i];
				}
					
				else if(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 (int i=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

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

foi oq eu entendi, me corrijam se estiver errado.

Jesuino_Master

Saudades do fflush(stdin)… :lol:

Criado 4 de março de 2009
Ultima resposta 7 de mar. de 2009
Respostas 7
Participantes 5