[RESOLVIDO] Ajuda com Algoritmo Bancário POO

Eae pessoal to tentando fazer um programinha simples de banco, mas não sei pq diabos o meu método de depositar não está setando o saldo! A seguir vai minha classe Banco (MAIN) e a classe Conta

(LEMBRANDO QUE O NUMERO DA CONTA E A SENHA EU N PRECISO TRATAR NO MOMENTO)

public class Banco {

public static void main(String[] args) {
    
    Scanner menu = new Scanner(System.in);
    int n;
    do {
        
    System.out.println("===================================================");
    System.out.println("Olá, seja bem vindo ao Sistema Bancário da Unipampa");
    System.out.println("---------------------------------------------------");
    System.out.println("           Digite 1 para criar uma conta.          ");
    System.out.println("                Digite 2 para sair                 ");
    System.out.println("===================================================");
    n = menu.nextInt();
    if(n == 1){
        int m;
        do{
            Conta conta = new Conta();
            conta.abrirConta();
            
            System.out.println("--------------------------------");
            System.out.println("1 - Para ver Status");
            System.out.println("2 - Verificar saldo");
            System.out.println("3 - Depositar");
            System.out.println("4 - Sacar");
            System.out.println("5 - Encerrar conta");
            System.out.println("6 - Desconectar do sistema...");
            System.out.println("--------------------------------");
            m = menu.nextInt();
            if(m == 1){
                System.out.println(conta.status());
            }
            else if(m == 2){
                System.out.println(conta.verificarsaldo());
            }
            else if(m == 3){
                System.out.println("Quanto você deseja depositar?");
                double valordepositar = menu.nextDouble();
                System.out.println(conta.depositar(valordepositar));
            }
            else if(m == 4){
                System.out.println("Quanto você deseja sacar?");
                double valorsacar = menu.nextDouble();
                System.out.println(conta.sacar(valorsacar));
            }
            else if(m == 5){
                System.out.println(conta.encerrarConta());
                break;
            }
            else if(m == 6){
                System.out.println("Desconectando...");
                break;
            }
        }while(true);
    }
    else if (n == 2){
        System.out.println("Desconectando...");
        break;
    }
    }while(true);       
}

}
E a classe Conta…

public class Conta {

private long nroConta;
private String senha;
private double saldo;
private boolean status;

public Conta() {

    this.nroConta = 0;
    this.senha = "";
    this.saldo = 0;
    this.status = false;

}

private long getNroConta() {
    return nroConta;
}

private void setNroConta(long nroConta) {
    this.nroConta = nroConta;
}

private String getSenha() {
    return senha;
}

private void setSenha(String senha) {
    this.senha = senha;
}

private double getSaldo() {
    return saldo;
}

private void setSaldo(double saldo) {
    this.saldo = saldo;
}

private boolean isStatus() {
    return status;
}

private void setStatus(boolean status) {
    this.status = status;
}

public String abrirConta() {
    if (this.status == false) {
        this.status = true;
        String msg = "Conta criada com Sucesso!";
        return msg;
    } else {
        String msg = "Conta já ativa.";
        return msg;
    }
}

public String encerrarConta() {
    if (this.status == true && this.saldo == 0) {
        this.status = false;
        String msg = "Conta encerrada com Sucesso!";
        return msg;
    } else {
        String msg = "Conta inexistente ou com saldo positivo/devedor";
        return msg;
    }
}

public String depositar(double deposito) {
    if (this.status = true)
    {
        this.saldo +=  deposito;
        String msg = "Deposito efetuado com sucesso!";
        return msg;
    }else {
        String msg = "Conta inexistente!";
        return msg;
    }
}

public boolean validarSenha(String senha) {
    
    if (senha.matches("^[0-9]*$") && senha.length() == 6) {
        this.setSenha(senha);
        return true;
    } else {
        return false;

    }
}

public double verificarsaldo() {
   return this.getSaldo();
}

public String sacar(double saque) {
     if (this.status = true)
    {
        if(this.saldo >= saque){            
        this.saldo = this.saldo - saque;
        String msg = "Saque efetuado com sucesso!";
        return msg;
        }
        else{
            String msg = "Saldo insuficiente!";
            return msg;
        }
    }else {
        String msg = "Conta inexistente!";
        return msg;
    }
}

public String status() {
    if (this.status == true) {
        String msg = "Numero da conta: " + this.nroConta + "\nStatus da conta: " + this.status + "\nSaldo da conta: " + this.saldo;
        return msg;
    } else {
        String msg = "Conta não encontrada!";
        return msg;
    }
}

}

Uma dica boa é você não usar tanto if, coloca um switch.
Pelo visto seu deposito não funciona pqe no seu construtor o status recebe false e no deposito você pergunta se ele é verdadeiro.

a cada iteração do seu loop vc está abrindo uma conta é isso mesmo?
na sua classe Conta no isStatus é getStatus isso acontece muito no netbeans

Sim, mas antes de abrir o menu eu dou um conta.abrirConta(); que altera o status pra true… Eu já tinha tentado com switch, eu troquei pq eu tinha achado que o problema era na forma de estruturar, mas pelo visto não era… kkk :confused:

Verdade, eu devo estar sobrescrevendo o valor dos atributos a cada instanciação do loop… Vou modificar aqui, lol!

isso mesmo daí vc perde os valores antigos

1 curtida

Deu certo, vlw amigão! haha