Dúvida Básica - Erro em 'for'

2 respostas
leandro_fernandes

Boa noite a todos.

Possuo um erro no código:

//Deitel JAVA - Como programar
//Exercício 4.19 pg122

import java.util.Scanner;
public class Vendedor {
	
	double item1 = 239.99;
	double item2 = 129.75;
	double item3 = 99.95;
	double item4 = 350.89;
	

	String nome;
	int qntItem1;
	int qntItem2;
	int qntItem3;
	int qntItem4;
	double totalVendido;
	double comissao;
	double salario;
	
	
	//MÉTODOS SETTERS
	public void setNome(String nome) {
		this.nome = nome;
	}
	public void setQntItem1(int qntItem1) {
		this.qntItem1 = qntItem1;
	}
	public void setQntItem2(int qntItem2) {
		this.qntItem2 = qntItem2;
	}
	public void setQntItem3(int qntItem3) {
		this.qntItem3 = qntItem3;
	}
	public void setQntItem4(int qntItem4) {
		this.qntItem4 = qntItem4;
	}
	
	//MÉTODO GET TOTAL VENDIDO
	public double getTotalVendido() {
		return (item1*qntItem1)+(item2*qntItem2)+(item3*qntItem3)+(item4*qntItem4);
	}	


	
	
	//METODO MAIN
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		Vendedor[] i = new Vendedor[3];
		
		//CRIA OBJETOS VENDEDORES
		for(int j=0; j<3; j++){
			i[j] = new Vendedor();			
		}
		
		//INSERE DADOS
		for(int j=0; j<3; j++){
			System.out.println("\nInsira o nome do Vendedor "+(j+1)+": ");
			i[j].setNome(input.nextLine());
			System.out.println("Insira a quantidade vendida do ITEM1: ");
			i[j].setQntItem1(input.nextInt());
			System.out.println("Insira a quantidade vendida do ITEM2: ");
			i[j].setQntItem2(input.nextInt());
			System.out.println("Insira a quantidade vendida do ITEM3: ");
			i[j].setQntItem3(input.nextInt());
			System.out.println("Insira a quantidade vendida do ITEM4: ");
			i[j].setQntItem4(input.nextInt());
			

			
		}
		
		for(int j=0; j<3; j++){
			System.out.println(i[j].nome);
		}
		                            
		                            
	}
}

Ele me pede:
1 - Nome
2 - Valor ITEM1
3 - Valor ITEM2
4 - Valor ITEM3
5 - Valor ITEM4

O correto seria pedir por 3 vezes, mas no segundo loop ele 'pula' o [1 - Nome] e já pede o [2 - Valor ITEM1]

O código está bem conciso, não consigo identificar o erro.

Alguém poderia me ajudar?

Obrigado desde já.

2 Respostas

danilo.coppi

O problema é que como o ultimo item do for você captura utilizando
i[j].setQntItem4(input.nextInt());
na "memória" de entrada de dados ainda tem um "\n", pois o input está pegando somente o Inteiro "nextInt"…

Então após esse ultimo item coloque
input.nextLine();
para "limpar" o caracter "\n" em cache

seu for deverá ficar da seguinte forma:

for(int j=0; j<3; j++){
        System.out.println("\nInsira o nome do Vendedor "+(j+1)+": ");
        i[j].setNome(input.nextLine());
        System.out.println("Insira a quantidade vendida do ITEM1: ");
        i[j].setQntItem1(input.nextInt());
        System.out.println("Insira a quantidade vendida do ITEM2: ");
        i[j].setQntItem2(input.nextInt());
        System.out.println("Insira a quantidade vendida do ITEM3: ");
        i[j].setQntItem3(input.nextInt());
        System.out.println("Insira a quantidade vendida do ITEM4: ");
        i[j].setQntItem4(input.nextInt());

        input.nextLine();		
    }
leandro_fernandes

Muito obrigado,

também funcionou da seguitne forma:

alterei o i[j].setNome(input.nextLine()); que recebe a String e guarda em nome para i[j].setNome(input.next());

Alguém possui um artigo sobre a diferença de ‘nextInt’, ‘nextLine’ e ‘next’.

Criado 7 de abril de 2011
Ultima resposta 8 de abr. de 2011
Respostas 2
Participantes 2