Problema com o exercicio

11 respostas
C

Eu comecei a desenvolver um programa de conta bancaria usando ArrayList, só que na hora que eu vou pesquisar não to conseguindo encontrar todas as contas que cadastrei somente a ultima que foi cadastrada.
Não estou conseguindo percorrer toda a lista aleatoriamente.
Segue o codigo que ja desenvolvi.

import java.util.<em>;

import javax.swing.</em>;

import java.util.ArrayList;

import java.util.List;
public class conta_banco {

String nome;

int num_conta,senha;

double saldo_inic;
void cadastro(){

nome = (JOptionPane.showInputDialog(Digite o seu nome));

num_conta++;

senha = Integer.parseInt(JOptionPane.showInputDialog(Digite  sua senha));

saldo_inic = Double.parseDouble(JOptionPane.showInputDialog(Digite o seu saldo inicial));

}
void deposito(ArrayList<conta_banco>lista){

int procura;

procura = Integer.parseInt(JOptionPane.showInputDialog(“informe o numero da sua conta”));

for(conta_banco x:lista){

if(x.num_conta == procura){

JOptionPane.showMessageDialog(null,Nome do titular da conta+nome);

saldo_inic+=Double.parseDouble(JOptionPane.showInputDialog(“Digite o valor a ser depositado”));

}

else{

JOptionPane.showMessageDialog(null,“Erro”);

}

}

}

void extrato(ArrayList<conta_banco>lista){
int pesquisa;

pesquisa = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da sua conta"));
for(conta_banco x:lista){
     if(x.num_conta == pesquisa){
JOptionPane.showMessageDialog(null,"Nome do titular da conta : "+nome+"\nSaldo : "+saldo_inic);    
}
}

}

void saque(ArrayList<conta_banco>lista){

int procura;

procura = Integer.parseInt(JOptionPane.showInputDialog(“informe o numero da sua conta”));

procura = Integer.parseInt(JOptionPane.showInputDialog(“informe a sua senha”));

for(conta_banco x:lista){

if(x.num_conta == procura & x.senha == procura){

JOptionPane.showMessageDialog(null,Nome do titular da conta+nome+Senha do titular+senha);

saldo_inic-=Double.parseDouble(JOptionPane.showInputDialog(“Digite o valor a ser sacado”));

}

else{

JOptionPane.showMessageDialog(null,“Erro”);

}

}

}

public static void main(String[] args) {
    int op=1;
    Scanner scan = new Scanner (System.in);
    List<conta_banco> lista = new ArrayList<conta_banco>();
    conta_banco cont = new conta_banco();
    lista.add(cont);
    
    while(op!=0){
        op = Integer.parseInt(JOptionPane.showInputDialog("1 - Cadastrar Conta\n2 - Depositar\n3 - Sacar\n4 - Extrato\n5 - Remover Conta\n0 - Sair"));
        if(op == 1){
            cont.cadastro();
        }
        else if(op == 2){
            cont.deposito(lista);
        }
        else if(op == 3){
            cont.saque(lista);
        }
        else if(op == 4){
            cont.extrato(lista);
        }
        else if(op == 0){
            break;
        }
    }
}


}

Quem puder me ajudar.
Agradeço desde já.

11 Respostas

asousaj

Sempre use a tag ‘Code’ para postar códigos, facilita a leitura.
Sempre inicie o nome de uma classe com letra maiúscula.

No seu main.

List<conta_banco> lista = new ArrayList<conta_banco>(); // cria ArrayList
conta_banco cont = new conta_banco(); // cria cont
lista.add(cont);   // adiciona a  conta no array, creio eu que não seria nesse momento, a conta não possui dado nenhum

Uma dica ‘em que momento está incluindo as novas contas na List?’.

diego.sas

Bom dia coutinho11 .

Esta sempre mostrando o ultimo registro cadastrado, devido vc apenas estar setando as variaveis da sua classe, e não adicionando um objeto na lista.
Para ficar melhor seu exercício, te aconselho a adicionar um objeto na lista no seu método de cadastro.
Ficaria ainda melhor se alterasse ArrayList por HashSet.
Abraços.

diego.sas

Da uma olhada neste exemplo…

import java.util.*;
import javax.swing.*;
import java.util.Map;

public class ContaBanco {
	Map <Integer, BeanConta>lista;
	public ContaBanco() {
		lista = new HashMap<Integer, BeanConta>();
	}

	void cadastro() {
		BeanConta beanConta = new BeanConta();
		beanConta.setNome(JOptionPane.showInputDialog("Digite o seu nome"));
		beanConta.setNum_conta(Integer.parseInt(JOptionPane.showInputDialog("Digite o nº da Conta")));
		beanConta.setSenha(Integer.parseInt(JOptionPane.showInputDialog("Digite sua senha")));
		beanConta.setSaldo_inic(Double.parseDouble(JOptionPane.showInputDialog("Digite o seu saldo inicial")));
		lista.put(beanConta.getNum_conta(), beanConta);
	}

	void deposito() {
		int procura;
		procura = Integer.parseInt(JOptionPane.showInputDialog("informe o numero da sua conta"));
		BeanConta result;
		if ((result = lista.get(procura)) != null) {
			JOptionPane.showMessageDialog(null, "Nome do titular da conta" + result.getNome());
			result.setSaldo_inic(result.getSaldo_inic() + Double.parseDouble(JOptionPane.showInputDialog("Digite o valor a ser depositado")));			
		} else {
			JOptionPane.showMessageDialog(null, "Erro");
		}
	}

	void extrato() {
		int pesquisa;
		pesquisa = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da sua conta"));
		BeanConta result;
		if ((result = lista.get(pesquisa)) != null) {
			JOptionPane.showMessageDialog(null, "Nome do titular da conta : " + result.getNome() + "\nSaldo : "
					+ result.getSaldo_inic());
		}
	}

	public static void main(String[] args) {
		int op = 1;
		ContaBanco cont = new ContaBanco();		
		while (op != 0) {
			op = Integer
					.parseInt(JOptionPane
							.showInputDialog("1 - Cadastrar Conta\n2 - Depositar\n3 - Sacar\n4 - Extrato\n5 - Remover Conta\n0 - Sair"));
			if (op == 1) {
				cont.cadastro();
			} else if (op == 2) {
				cont.deposito();
			} else if (op == 3) {
				//cont.saque();
				// Agora faz a lógica para sacar...
			} else if (op == 4) {
				cont.extrato();
			} else if (op == 0) {
				break;
			}
		}
	}

	private class BeanConta {
		/**
		 * @return Retorna nome.
		 */
		public String getNome() {
			return nome;
		}

		/**
		 * @return Retorna num_conta.
		 */
		public int getNum_conta() {
			return num_conta;
		}

		/**
		 * @return Retorna senha.
		 */
		public int getSenha() {
			return senha;
		}

		/**
		 * @return Retorna saldo_inic.
		 */
		public double getSaldo_inic() {
			return saldo_inic;
		}

		/**
		 * @param nomeParam Atribui nome.
		 */
		public void setNome(String nomeParam) {
			this.nome = nomeParam;
		}

		/**
		 * @param num_contaParam Atribui num_conta.
		 */
		public void setNum_conta(int num_contaParam) {
			this.num_conta = num_contaParam;
		}

		/**
		 * @param senhaParam Atribui senha.
		 */
		public void setSenha(int senhaParam) {
			this.senha = senhaParam;
		}

		/**
		 * @param saldo_inicParam Atribui saldo_inic.
		 */
		public void setSaldo_inic(double saldo_inicParam) {
			this.saldo_inic = saldo_inicParam;
		}

		private String nome;
		private int num_conta, senha;
		private double saldo_inic;
	}
}
Lucas_Abbatepaolo

diego.sas:
Bom dia coutinho11 .

Ficaria ainda melhor se alterasse ArrayList por HashSet.
Abraços.

Vc pode me explicar pq seria melhor??

diego.sas

Lucas Abbatepaolo:
diego.sas:
Bom dia coutinho11 .

Ficaria ainda melhor se alterasse ArrayList por HashSet.
Abraços.

Vc pode me explicar pq seria melhor??

De imediato citei o HashSet, pois acreditei que ele não gostaria de ter o mesmo objeto na lista n vezes…

M

Realmente, só apresenta o ultimo resgistro por que você só adicionou um.

No seu while você deveria adicionar um novo objeto conta na lista sempre que o compando for cadastrar.

C
Aew pessoal valew pelas dicas mas consegui pesquisar agora to tentando remover um elemento da ArrayList
import java.util.*;
import javax.swing.*;
import java.util.ArrayList;

public class conta_banco {
    String nome;
    int num_conta,senha;
    double saldo_inic;
    
void cadastro(conta_banco x){
    x.nome = (JOptionPane.showInputDialog("Digite o seu nome"));
    
    x.senha = Integer.parseInt(JOptionPane.showInputDialog("Digite  sua senha"));
    
    
    x.saldo_inic = Double.parseDouble(JOptionPane.showInputDialog("Digite o seu saldo inicial")); 
}  

void deposito(ArrayList<conta_banco>lista){
  int procura;
 // pesquisar o a conta pelo numero
  procura = Integer.parseInt(JOptionPane.showInputDialog("informe o numero da sua conta"));
  for(conta_banco x:lista){
     //Se encontra o numero da conta digitada a pessoa faz o deposito 
      if(x.num_conta == procura){
      JOptionPane.showMessageDialog(null,"Nome do titular da conta"+x.nome);
      x.saldo_inic+=Double.parseDouble(JOptionPane.showInputDialog("Digite o valor a ser depositado"));
     }
    
  }
 
}

void extrato(ArrayList<conta_banco>lista){
    int pesquisa,busca_senha;
    pesquisa = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da sua conta"));
    for(conta_banco x:lista){
         if(x.num_conta == pesquisa){
             busca_senha=Integer.parseInt(JOptionPane.showInputDialog("Digite a senha "));
             if(x.senha==busca_senha)
             {
                //lista.remove(x);
                 JOptionPane.showMessageDialog(null,"Nome do titular da conta : "+x.nome+"\nSaldo : "+x.saldo_inic);    
             }
             //f(x.nome.compareToIgnoreCase(busca)==0)
         }
    
    }
    }

void saque(ArrayList<conta_banco>lista)
{
  int pesquisa,busca_senha,busca_saldo;
    pesquisa = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da sua conta"));
    for(conta_banco x:lista){
         if(x.num_conta == pesquisa){
             busca_senha=Integer.parseInt(JOptionPane.showInputDialog("Digite a senha "));
             if(x.senha==busca_senha)
             {
                 if(x.saldo_inic<=0)
                 {
                     JOptionPane.showMessageDialog(null,"Saldo inferior ao solicitado");
                 }
                 busca_saldo = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor a ser sacado"));    
                 if(busca_saldo > x.saldo_inic)
                 {
                     JOptionPane.showMessageDialog(null,"Valor solicitado acima ");
                 }
                 else{
                     x.saldo_inic-=busca_saldo; 
                 }
                  
                    
             }  
}
   //lista.remove(x);
    }
}

void remover(ArrayList<conta_banco>lista)
{
  int pesquisa,busca_senha;
    pesquisa = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da sua conta"));
    for(conta_banco x:lista){
         if(x.num_conta == pesquisa){
             busca_senha=Integer.parseInt(JOptionPane.showInputDialog("Digite a senha "));
             if(x.senha==busca_senha)
             {
     
             if(lista.remove(lista))
             {
                 JOptionPane.showMessageDialog(null,"Conta Removida");
             }
             else
             {
                 break;
                 
             }
               
          }
        }
    }// terminar o remover
}

    public static void main(String[] args) {
        int op=1,cont1=0;
        Scanner scan = new Scanner (System.in);
        ArrayList<conta_banco> lista = new ArrayList<conta_banco>();
         while(op!=0){
        conta_banco cont = new conta_banco();
        //adiciona o objeto na lista
        lista.add(cont);
        
      
            op = Integer.parseInt(JOptionPane.showInputDialog("1 - Cadastrar Conta\n2 - Depositar\n3 - Sacar\n4 - Extrato\n5 - Remover Conta\n0 - Sair"));
            if(op == 1){
                cont.cadastro(cont);
                while(op==1)
                {
                    cont1++;
                    break;
                }
                cont.num_conta=cont1;
                JOptionPane.showMessageDialog(null,"Titular "+cont.nome+"Numero conta"+cont.num_conta);
            }
            else if(op == 2){
                cont.deposito(lista);
            }
            else if(op == 3)
                    {
                cont.saque(lista);        
                    }
            else if(op == 4){
                cont.extrato(lista);
            }
            else if(op == 5)
            {
                cont.remover(lista);
            }
            else if(op == 0){
                break;
            }
        }
    }}
diego.sas

Só uma dica, vi que você esta utilizando ArrayList como tipo de parametro dos seus métodos.

Procure utilizar interface ao invés da classe que implementa a mesma.

void deposito(ArrayList<conta_banco>lista)// Seu método
void deposito(List<conta_banco>lista)// Procure fazer assim.

Abçs

diego.sas
coutinho11
void remover(ArrayList<conta_banco>lista)   
{   
  int pesquisa,busca_senha;   
    pesquisa = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da sua conta"));   
    for(conta_banco x:lista){   
         if(x.num_conta == pesquisa){   
             busca_senha=Integer.parseInt(JOptionPane.showInputDialog("Digite a senha "));   
             if(x.senha==busca_senha)   
             {   
       
             if(lista.contains(x))  
             {   
                 lista.remove(x);
                 JOptionPane.showMessageDialog(null,"Conta Removida");   
             }   
             else   
             {   
                 JOptionPane.showMessageDialog(null,"Não localizado");   
                 break;   
                   
             }   
                 
          }   
        }   
    }// terminar o remover   
}
]
C

Se você cadastra só um cliente ele exclui sem nenhum problema porem se vc cadastrar mais de o programa da a mensagem que a conta foi excluida só que não esta retornando no menu,
Encerra a execução logo após.

Um Help Por Favor

diego.sas

Você não pode remover um objeto da lista que esta sendo iterada.
Causará uma exceção…
Desconsidera o exemplo que te mandei, e utiliza uma lista auxiliar.

Criado 20 de novembro de 2011
Ultima resposta 22 de nov. de 2011
Respostas 11
Participantes 5