Preenchendo entidades

8 respostas
S

Galera tenho um método que faço uma busca no array. Isso funciona na primeira vez, mas quando faço uma busca novamente os meus objetos estão preenchidos duplicados. Como posso resolver isso? Segue o código :

public ContaEnergia buscarContaEnergia(int contaEnergia)
    {
        ContaEnergia conta = new ContaEnergia();
        
        for (ContaEnergia obj : arrayContaEnergia) 
        {
            if(obj.getNumeroConta() ==  contaEnergia)
            {

                conta.setNomeEndereco(obj.getNomeEndereco());
                conta.setNumeroConta(obj.getNumeroConta());
                conta.setQtdeKWConsumidos(obj.getQtdeKWConsumidos());
                conta.setValorKWUnitario(obj.getValorKWUnitario());
            }
        }
        return conta;
    }

Obrigado

8 Respostas

R

Cara, difícil entender o que você está falando heim, de qq forma vc pode retornar o próprio obj, pq criar um novo e setar cada propriedade???

Outra coisa, vc não está buscando no array, e sim em um provável List…(são coisas bem diferentes)

if(obj.getNumeroConta() ==  contaEnergia)  {
    return obj;
}
S

Desculpa, vou colocar tudo que fiz para ficar mais fácil:

Main:

/**
 *
 * @author Uilson Claudio Filho
 * RA: 20477492
 */

package maisenergia;
import javax.swing.JOptionPane;


public class AppContaEnergia {

 
    public static void main(String[] args) {
        // TODO code application logic here
        int i, opcao;
        GerenciaContasEnergia contasEnergia = new GerenciaContasEnergia();
        ContaEnergia contaEnergia = new ContaEnergia();
        do
        {
            opcao= Integer.parseInt(JOptionPane.showInputDialog("1 - " +
                    "Adicionar ContaEnergia" + 
                    "\n 2 - Buscar ContaEnergia e exibir os dados" +
                    "\n 3 - Exibir mais econômica" +
                    "\n 4 - Exibir Consumo Médio" +
                    "\n 5 - Listar todas" +
                    "\n 6 ? Sair"
                    
                    ));
         
            
            switch(opcao){
                case 1:
                        
                    Cliente cliente = new Cliente();
                    
                    cliente.setNome(JOptionPane.showInputDialog("Nome do Cliente:"));
                    cliente.setEndereco(JOptionPane.showInputDialog("Endereço do Cliente:"));
                    
                    contaEnergia.setNomeEndereco(cliente);
                    
                    contaEnergia.setNumeroConta(Integer.parseInt(JOptionPane.showInputDialog("Numero da conta:")));
                    
                    contaEnergia.setQtdeKWConsumidos(Float.parseFloat(JOptionPane.showInputDialog("KW Consumidos")));
                    
                    contaEnergia.setValorKWUnitario(Float.parseFloat(JOptionPane.showInputDialog("KW Unitário")));
                    
                    contasEnergia.adicionarContaEnergia(contaEnergia);
                    
                    break;
                
                case 2:
                    
                    int dadosConta = Integer.parseInt(JOptionPane.showInputDialog("Entre com o numero da conta"));
                    ContaEnergia valorConta = contasEnergia.buscarContaEnergia(dadosConta);
                    //valorConta.Imprimir();
                    JOptionPane.showMessageDialog(null, valorConta.Imprimir());
                    break;
                    
                case 3:
                    break;
                    
                case 4:
                    
                    float valorContaMedia = contasEnergia.exibirConsumoMedioKw();
                    JOptionPane.showMessageDialog(null, "Valor da média:" + valorContaMedia);
                    
                    break;
                
                case 5:
                    
                    JOptionPane.showMessageDialog(null, contasEnergia.listarTodas());
                    
                    break;
                
                case 6:
                    System.exit(0);
                    break;
                
                default:
                    JOptionPane.showMessageDialog(null, "Opção inválida!! Escolha novamente");
                    opcao = 1;
                    
            }
        }while(opcao >=1 && opcao <= 6);
 
    }
}

Classe ContaEnergia:

/**
 *
 * @author Uilson Claudio Filho
 * RA: 20477492
 */

package maisenergia;

public class ContaEnergia {
    

    public ContaEnergia(int numeroConta,
            String cliente,
            Float valorKWUnitario,
            Float qtdeKWConsumidos,
            Cliente nomeEndereco,
            Float total)
    {
        this.numeroConta = numeroConta;
        this.valorKWUnitario = valorKWUnitario;
        this.qtdeKWConsumidos = qtdeKWConsumidos;
        this.nomeEndereco  = nomeEndereco;
        this.total = total;
    }

    public ContaEnergia(){}
    
    private int numeroConta;
    private float valorKWUnitario;
    private float qtdeKWConsumidos;
    private Cliente nomeEndereco;
    private float total;
    
    public void setTotal( float total){
        
        this.total = total;
    }
    public float getTotal(){
        
        return this.total;
    }
    public void setNomeEndereco( Cliente cliente){
        
        nomeEndereco = cliente;
    }
    public Cliente getNomeEndereco(){
        
        return this.nomeEndereco;
    }
    
    public void setNumeroConta( int numeroConta ){
        this.numeroConta = numeroConta;
    }
    public int getNumeroConta(){
        return this.numeroConta;
    }
    
    public void setValorKWUnitario( Float valorKWUnitario ){
        this.valorKWUnitario = valorKWUnitario;
    }
    public float getValorKWUnitario(){
        return this.valorKWUnitario;
    }
    
    public void setQtdeKWConsumidos( Float qtdeKWConsumidos ){
        this.qtdeKWConsumidos = qtdeKWConsumidos;
    }
    public float getQtdeKWConsumidos(){
        return this.qtdeKWConsumidos;
    }
    
//    public float calcularTotalConta(Float valorKWUnitario, Float qtdeKWConsumidos )
//    {
//        total = qtdeKWConsumidos * valorKWUnitario;
//        
//        return total;
//    }
    
    public String Imprimir()
    {
        String saida = "";
        
        saida += "\n" + "Nome do Cliente: " + nomeEndereco.getNome() 
                +  "\n" + "Endereço: " + nomeEndereco.getEndereco() 
                +  "\n" + "Numero da conta: " + numeroConta
                +  "\n" + "KW Consumidos: " + qtdeKWConsumidos
                +  "\n" + "KW Unitário: " + valorKWUnitario;
                
        return saida; 
    }
    
}

Classe GerenciaContasEnergia:

/**
 *
 * @author Uilson Claudio Filho
 * RA: 20477492
 */
package maisenergia;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class GerenciaContasEnergia {
    
    ArrayList<ContaEnergia> arrayContaEnergia;
 
    public GerenciaContasEnergia()
    {
        arrayContaEnergia = new ArrayList();
    }

    public void adicionarContaEnergia(ContaEnergia conta)
    {
        arrayContaEnergia.add(conta);
    }
    
    public ContaEnergia buscarContaEnergia(int contaEnergia)
    {
        ContaEnergia conta = new ContaEnergia();
        
        for (ContaEnergia obj : arrayContaEnergia) 
        {
            if(obj.getNumeroConta() ==  contaEnergia)
            {
                    return obj;
//                conta.setNomeEndereco(obj.getNomeEndereco());
//                conta.setNumeroConta(obj.getNumeroConta());
//                conta.setQtdeKWConsumidos(obj.getQtdeKWConsumidos());
//                conta.setValorKWUnitario(obj.getValorKWUnitario());
            }
        }
        return conta;
    }
    
    public String listarTodas()
    {
        String saida= "";
        if(arrayContaEnergia.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
                saida += obj.Imprimir() + "\n";
            }
        }
        return saida;
    }
    
    public String exibirContaEconomica()
    {
        String saida= "";
        
        if(arrayContaEnergia.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
                saida += obj.Imprimir() + "\n";
            }
        }
        
        return saida;
    }
    
    public float exibirConsumoMedioKw()
    {
        String saida= "";
        float total = 0;
        float totalMedia=0;
        
        ContaEnergia conta = new ContaEnergia();
        
        if(arrayContaEnergia.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
                total+= obj.getQtdeKWConsumidos();
            }
            
            totalMedia = total /  arrayContaEnergia.size();

        }
        return totalMedia;
    }
    
}

Classe cliente Java:

/**
 *
 * @author Uilson Claudio Filho
 * RA: 20477492
 */
package maisenergia;

public class Cliente {
    private String nome;
    private String endereco;
    
    public void setNome( String nome ){
        this.nome = nome;
    }
    public String getNome(){
        return this.nome;
    }
    
    public void setEndereco( String endereco ){
        this.endereco = endereco;
    }
    public String getEndereco(){
        return this.endereco;
    }
    
    public String Imprimir()
    {
        String retorno = "Nome: " + this.nome + "Endereco: " + this.endereco;
        return retorno;
    }
}

Dentro dessas classes, preciso varrer o arrayList para pegar o que o usuário cadastrou . O metodo que estou tentando fazer isso é o :

public ContaEnergia buscarContaEnergia(int contaEnergia)
    {
        ContaEnergia conta = new ContaEnergia();
        
        for (ContaEnergia obj : arrayContaEnergia) 
        {
            if(obj.getNumeroConta() ==  contaEnergia)
            {
                    return obj;
//                conta.setNomeEndereco(obj.getNomeEndereco());
//                conta.setNumeroConta(obj.getNumeroConta());
//                conta.setQtdeKWConsumidos(obj.getQtdeKWConsumidos());
//                conta.setValorKWUnitario(obj.getValorKWUnitario());
            }
        }
        return conta;
    }

Eu até alterei da maneira que vc me falou , mas quando faço a segunda pesquisa ele me retorna erro, porem não exibe o erro no console do netbeans e fecha o programa.
É esse ponto que postei, mas agora vc tem todas as classes e objetos para verificar, pois estou começando com java e preciso entregar esse trabalho hj ainda.

Obrigado pela ajuda

R

Sem saber exatamente a Exception que retorna fica difícil, mas vamos lá…

Caso entre neste ponto…

ContaEnergia valorConta = contasEnergia.buscarContaEnergia(dadosConta);

e não encontre nenhuma conta, na sua próxima execução…

JOptionPane.showMessageDialog(null, valorConta.Imprimir());

irá executar o método Imprimir correto?

Neste momento, o seu objeto valorConta não está null, porém está vazio!!!
o método imprimir executa o seguinte código…

saida += "\n" + "Nome do Cliente: " + nomeEndereco.getNome()

Aqui a propriedade ‘nomeEndereco’ da sua classe vai estar null, portanto, NullPointerException.

è apenas uma suposição, já que vc não colocou a Exception que ocorreu…

Tente usar o try{…}cacth(Exception e){e.printStackTrace()} no seu método, assim vc vai ter a Exception se lançada!!!

S

É isso mesmo, porem como faço para deixar o meu ArrayList preenchido e fazer várias pesquisas ?

Obrigado

R

Se vc não adicionou nada não tem o que pesquisar, basta comparar os objetos == null, assim vc garante que não vai executar o método de um objeto nulo. No seu caso, por exemplo, eu faria assim:

public ContaEnergia buscarContaEnergia(int contaEnergia)  
    {  
        for (ContaEnergia obj : arrayContaEnergia)     {  
            if(obj.getNumeroConta() ==  contaEnergia)  
            {  
                    return obj;  
            }  
        }  
        return null;  
    }

e na chamada deste método…

ContaEnergia valorConta = contasEnergia.buscarContaEnergia(dadosConta); 
if (valorConta !=null){                   
     JOptionPane.showMessageDialog(null, valorConta.Imprimir());
}
S

No caso foi adicionado 3 itens, mas só consigo fazer uma pesquisa. Na segunda pesquisa parece que ele preenche com null e perco tudo o que tenho no meu array, tendo que inserir tudo de novo…
Pq isso acontece ?

R

provavelmente pq vc tem o código

ContaEnergia contaEnergia = new ContaEnergia();

no lugar errado…

Coloque dentro do,

switch(opcao){  
                case 1:  
                contaEnergia = new ContaEnergia();
S

Em relação a esse tópico deu certo, muito obrigado…Mas gostaria de fazer outra pergunta em relação a esse mesmo cenário.
Tenho um método chamado exibirContaEconomica, esse metodo deve retornar o menor consumo cadastrado dessa propriedade getValorKWUnitario. Só preciso fazer um for e retornar isso, mas não sei como fazer. Poderia me ajudar por favor ?

Obrigado

Criado 9 de maio de 2014
Ultima resposta 9 de mai. de 2014
Respostas 8
Participantes 2