Duvida chamar metodos

8 respostas
N

Boa tarde pessoal,

Estou tentando fazer um programa de maquina registradora, bem simples, mas estou enrolado aqui, seria um programa com 2 classes e em 1 das classes 2 métodos que seriam eles --> adicionarItem e imprimirCupom, pois bem, eu criei a classe chamada MaquinaRegistradora, nela criei 3 variáveis: String descricao, int qtde, float valorUnitario e seus métodos get e set.

O método adicionarItem está assim:

public void adicionarItem(){
		MaquinaRegistradora reg = new MaquinaRegistradora();
		reg.setDescricao(JOptionPane.showInputDialog("PRODUTO"));
		reg.setQtde(Integer.parseInt(JOptionPane.showInputDialog("QUANTIDADE")));
		reg.setValorUni(Float.parseFloat(JOptionPane.showInputDialog("VALOR")));
	}

e agora vem o problema, o método ImpCupom está assim:

public void impCupom(){
		
		for (int i=0;i<reg.size();i++)
		JOptionPane.showMessageDialog(null, reg.get(i).getDescricao()+" "+reg.get(i).getQtde()+" x R$ "+reg.get(i).getValorUni()+" = R$ "+(reg.get(i).getQtde()*reg.get(i).getValorUni()));
	}

e na classe programa criei o menu para adicionar item, imprimir cupom e sair e está assim:

if(opcao==1){				
				MaquinaRegistradora reg = new MaquinaRegistradora();
				reg.adicionarItem();
				mr.add(reg);
até ai tudo bem, consigo cadastrar o produto, informar a quantidade e o valor, mas quando vou imprimir não consigo;
if(opcao==2){
				MaquinaRegistradora imp = new MaquinaRegistradora();
				imp.impCupom();

Podem me ajudar ? Onde estou errando ? O que preciso estudar mais ?
Desde já, Obrigado.

8 Respostas

S

Olá Newton,

Qual erro está sendo apresentado?

Pelo códigos que você apresentou o método impCupom() precisa do ArrayList de nome “reg” para sua execução. Esse ArrayList está “visível” para o método impCupom()?

Se não estiver, você precise passa-lo como parâmetro.

N

quando eu tento imprimir o cupom, não imprimi nada, volta para o menu, o ArrayList eu crio em qual classe ? eu criei na classe programa, mas também não deu certo, agora coloquei nas duas e nada também.
Vou colocar o código inteiro das 2 classes.

Classe MaquinaRegistradora

public class MaquinaRegistradora {
	ArrayList<MaquinaRegistradora> reg = new ArrayList<MaquinaRegistradora>();
	String descricao;
	int qtde;
	float valorUni;
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public int getQtde() {
		return qtde;
	}
	public void setQtde(int qtde) {
		this.qtde = qtde;
	}
	public float getValorUni() {
		return valorUni;
	}
	public void setValorUni(float valorUni) {
		this.valorUni = valorUni;
	}
	
	public void adicionarItem(){
		MaquinaRegistradora reg = new MaquinaRegistradora();
		reg.setDescricao(JOptionPane.showInputDialog("PRODUTO"));
		reg.setQtde(Integer.parseInt(JOptionPane.showInputDialog("QUANTIDADE")));
		reg.setValorUni(Float.parseFloat(JOptionPane.showInputDialog("VALOR")));
	}
	public void impCupom(){
		
		for (int i=0;i<reg.size();i++)
		JOptionPane.showMessageDialog(null, reg.get(i).getDescricao()+" "+reg.get(i).getQtde()+" x R$ "+reg.get(i).getValorUni()+" = R$ "+(reg.get(i).getQtde()*reg.get(i).getValorUni()));
	}
}

Classe Programa

public class Programa{

	public static void main(String[] args) {
		ArrayList<MaquinaRegistradora> mr = new ArrayList<MaquinaRegistradora>();
		String menu = "1 - Adicionar Item\n";
			   menu +="2 - Imprimir Cupom\n";
			   menu +="3 - Sair.";
		String entrada;
		int opcao=0;
		do{
			entrada = JOptionPane.showInputDialog(menu);
			opcao = Integer.parseInt(entrada);
			if(opcao==1){				
				MaquinaRegistradora reg = new MaquinaRegistradora();
				reg.adicionarItem();
				mr.add(reg);
				String opc = JOptionPane.showInputDialog("Desejada adicionar mais um item? (s/n)");
						while(opc.equals("s")||opc.equals("S")){
						reg.adicionarItem();	
						opc = JOptionPane.showInputDialog("Desejada adicionar mais um item? (s/n)");
					}
				}	
				
			if(opcao==2){
				MaquinaRegistradora imp = new MaquinaRegistradora();
				imp.impCupom();
				}
	}while(opcao!=3);
}
}
pmlm

Estás com problemas em entender conceiros básicos de objectos.

Quantas máquinas registadores tens? Se é apenas uma, apenas deverá haver um “new MaquinaRegistadora()” no teu código.

Edit:
Respondi acima antes de ver o teu último post.
Neste caso queres vários items, a que chamaste MaquinaRegistadora.

Mas o que eu disse acima é válido agora para a lista. Apenas queres uma lista de máquinas, que deverá estar no teu Programa. Uma MaquinaRegistadora não conhece as outras, apenas deve saber preencher os seus valores e mostrar-se:

public void adicionarItem(){  
        this.setDescricao(JOptionPane.showInputDialog("PRODUTO"));  
        this.setQtde(Integer.parseInt(JOptionPane.showInputDialog("QUANTIDADE")));  
        this.setValorUni(Float.parseFloat(JOptionPane.showInputDialog("VALOR")));  
    }  

  public void impCupom(){  
          
        JOptionPane.showMessageDialog(null, this.getDescricao()+" "+this.getQtde()+" x R$ "+this.getValorUni()+" = R$ "+(this.getQtde()*this.getValorUni()));  
    }

O teu programa é que deve guardar a lista de caixas e mandar imprimir todos os itens da lista.

N

Seria apenas uma mesmo, vou ler mais sobre objetos, em qual local correto seria o “new MaquinaRegistradora()” ?

S

Newton,

Seu código está bem confuso, olha esse trecho do seu código:

MaquinaRegistradora reg = new MaquinaRegistradora();  // Você cria uma Máquina Registradora
reg.adicionarItem();                                                     // Você chama o método adcionarItem que cria OUTRA Máquina de Registrar     e seta seus atributos.
mr.add(reg); // Você adcionar a Máquina Registradora "reg" no ArrayList, só que os atributos modificados foram da OUTRA Máquina Registradora que você criou dentro do método.
public void adicionarItem(){  
        MaquinaRegistradora reg = new MaquinaRegistradora();  
        reg.setDescricao(JOptionPane.showInputDialog("PRODUTO"));  
        reg.setQtde(Integer.parseInt(JOptionPane.showInputDialog("QUANTIDADE")));  
        reg.setValorUni(Float.parseFloat(JOptionPane.showInputDialog("VALOR")));  
    }

Deu pra entender?

Da uma olhada nas apostilas da Caelum são bem recomendadas.

N

Agora entendi, obrigado pelas explicações!
Vou da uma lida nessas apostilas, já li algumas nesse site, é muito bom.

Só tenho um problema agora, quando cadastro mais de 1 produto, quando vou imprimir, por exemplo, eu cadastrei: "2 CANETAS NO VALOR DE 1.20 CADA" o sistema pergunta se eu quero cadastrar mais itens, digo que sim, cadastrei: "3 BISCOITOS NO VALOR DE 1.50 CADA", quando vou imprimir o cupom, ele me mostra o último item cadastrado nesse caso 2 vezes, e não mostra o primeiro cadastrado.
alguma dica?

public class MaquinaRegistradora {
	String descricao;
	int qtde;
	float valorUni;
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public int getQtde() {
		return qtde;
	}
	public void setQtde(int qtde) {
		this.qtde = qtde;
	}
	public float getValorUni() {
		return valorUni;
	}
	public void setValorUni(float valorUni) {
		this.valorUni = valorUni;
	}
	
	public void adicionarItem(){		
		this.setDescricao(JOptionPane.showInputDialog("PRODUTO"));
		this.setQtde(Integer.parseInt(JOptionPane.showInputDialog("QUANTIDADE")));
		this.setValorUni(Float.parseFloat(JOptionPane.showInputDialog("VALOR")));
	}
	public void impCupom(){		
		JOptionPane.showMessageDialog(null, this.getDescricao()+" "+this.getQtde()+" x R$ "+this.getValorUni()+" = R$ "+(this.getQtde()*this.getValorUni()));
	}
	
}

Programa

public class Programa{

	public static void main(String[] args) {
		ArrayList<MaquinaRegistradora> mr = new ArrayList<MaquinaRegistradora>();
		MaquinaRegistradora reg = new MaquinaRegistradora();
		String menu = "1 - Adicionar Item\n";
			   menu +="2 - Imprimir Cupom\n";
			   menu +="3 - Sair.";
		String entrada;
		int opcao=0;
		do{
			entrada = JOptionPane.showInputDialog(menu);
			opcao = Integer.parseInt(entrada);
			if(opcao==1){						
				reg.adicionarItem();
				mr.add(reg);
				String opc = JOptionPane.showInputDialog("Desejada adicionar mais um item? (s/n)");
					while(opc.equals("s")||opc.equals("S")){
						reg.adicionarItem();	
						opc = JOptionPane.showInputDialog("Desejada adicionar mais um item? (s/n)");
					}
				}					
			if(opcao==2){
				for(int i=0;i<mr.size();i++){
				reg.impCupom();
				}
			}
		}while(opcao!=3);
}
}
pmlm

Tu respondeste na tua própria questão.


Só tenho um problema agora, quando cadastro mais de 1 produto, quando vou imprimir, por exemplo, eu cadastrei: “2 CANETAS NO VALOR DE 1.20 CADA” o sistema pergunta se eu quero cadastrar mais itens, digo que sim, cadastrei: “3 BISCOITOS NO VALOR DE 1.50 CADA”, quando vou imprimir o cupom, ele me mostra o último item cadastrado nesse caso 2 vezes, e não mostra o primeiro cadastrado.

A questão é que tu não tens Produto/item em lado nenhum. Tens uma MaquinaRegistadora que vais mudando as propriedades.

O que tu realmente queres é:

Uma classe programa com uma máquina registadora.

Uma classe Máquina Registadora com uma lista de items e métodos para criar um novo item e listar items.

Uma classe Item(ou Produto) com descricao, qtde e valorUni.

N

Ok, consegui terminar, obrigado pelas explicações!!

Tenha outra dúvida, como seria feito esse meu código, usando Vetores ou invés de ArrayList ?

MaquinaRegistradora

public class MaquinaRegistradora {
	ArrayList<MaquinaRegistradora> mr = new ArrayList<MaquinaRegistradora>();
	String descricao;
	int qtde;
	float valorUni;
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public int getQtde() {
		return qtde;
	}
	public void setQtde(int qtde) {
		this.qtde = qtde;
	}
	public float getValorUni() {
		return valorUni;
	}
	public void setValorUni(float valorUni) {
		this.valorUni = valorUni;
	}
	
	public void adicionarItem(){
		MaquinaRegistradora registrar = new MaquinaRegistradora();
		registrar.setDescricao(JOptionPane.showInputDialog("PRODUTO"));
		registrar.setQtde(Integer.parseInt(JOptionPane.showInputDialog("QUANTIDADE")));
		registrar.setValorUni(Float.parseFloat(JOptionPane.showInputDialog("VALOR")));
		mr.add(registrar);
	}
	public void impCupom(){
		for (int i=0;i<mr.size();i++){
		JOptionPane.showMessageDialog(null, mr.get(i).getDescricao()+" "+mr.get(i).getQtde()+" x R$ "+mr.get(i).getValorUni()+" = R$ "+(mr.get(i).getQtde()*mr.get(i).getValorUni()));
		}
	}	
}

Programa:

public class Programa{

	public static void main(String[] args) {
		MaquinaRegistradora registradora = new MaquinaRegistradora();
		String menu = "1 - Adicionar Item\n";
			   menu +="2 - Imprimir Cupom\n";
			   menu +="3 - Sair.";
		String entrada;
		int opcao=0;
		do{
			entrada = JOptionPane.showInputDialog(menu);
			opcao = Integer.parseInt(entrada);
			if(opcao==1){						
				registradora.adicionarItem();
					String opc = JOptionPane.showInputDialog("Deseja adicionar mais um item? (s/n)");
					while(opc.equals("s")||opc.equals("S")){
						registradora.adicionarItem();	
						opc = JOptionPane.showInputDialog("Deseja adicionar mais um item? (s/n)");
					}
				}					
			if(opcao==2){
				registradora.impCupom();
			}
		}while(opcao!=3);
}
}
Criado 23 de outubro de 2014
Ultima resposta 24 de out. de 2014
Respostas 8
Participantes 3