Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Sugestões /Correções

Fala pessoal, fiz algumas alterações na classe Conta, adicionando 2 métodos => limiteSaque e limiteTransferencia onde é verificado o limite para cada operação na conta , para quem puder sugerir melhorias/correções ficarei grato, irá ajudar bastante no aprendizado. Segue o código.


public class Conta {

    double saldo;
    int agencia;
    int numero;
    String titular;

    public void deposita(double valor) {
        this.saldo += valor;
    }

    public boolean limiteSaque(double valor) {
        double limite = 1000;
        if (valor <= limite) {
            return true;
        } else {
            return false;
        }
    }

  public boolean saca(double valor) {
        if (!limiteSaque(valor)) {
            System.out.println("Valor acima do limite diário");
            return false;
        }
        if (valor > saldo) {

            System.out.println("Saldo Insuficiente");
            return false;
        } else {
            saldo -= valor;
            return true;
        }

    }

    public boolean limiteTransferencia(double valor) {

        double limite = 800;
        if (valor <= limite) {
            return true;
        } else {
            System.out.println("Valor informado nao permitido para esta transacao");
            return false;
        }
    }

    public boolean transfere(double valor, Conta destino) {
        if (limiteTransferencia(valor)) {
            saca(valor);
            destino.deposita(valor);
            return true;
        } else {
            return false;
        }
    }
}

//////////////////////////////////////////

public class CriaConta {
    public static void main(String[] args) {
        Conta marcelo = new Conta();
        marcelo.deposita(1000);

        Conta ana = new Conta();
        ana.deposita(100);

        marcelo.transfere(800, ana);


        System.out.println("");

        System.out.println("Saldo da Conta da Ana atualizada=>" + " " + ana.saldo);

        System.out.println("");

        System.out.println("Saldo da Conta do Marcelo Atualizada=>" + " " + marcelo.saldo);
    }
}
4 respostas

Leonardo, acho que pode dar problema ao realizar transferência.

Quando tu faz a transferência, ele tem uma condição de estar abaixo do limite de transferência, mas ele não tem condição para verificar se o saque foi realizado ou não. Então, se o saca() for negado, o deposita() vai continuar funcionando, o que acabaria por criar dinheiro.

Lukas, primeiramente obrigado pela contribuição!

Realmente tem um problema no método transfere(), como você mencionou o depósito ocorre mesmo se saca() não for verdadeiro

Fiz algumas alterações no método transfere(), onde retirei a invocação do método saca(). E adicionei o método verificaValorNegativo

public class ContaCorrente extends Conta {

    public ContaCorrente(int numero, int agencia) {
        super(numero, agencia);

    }

    @Override
    public boolean limiteSaque(double valor) {

        double limite = 200;

        if (limite >= valor) {

            return true;

        } 
        else 
        {
            System.out.println("Valor acima do Limite permitido para saque");
            return false;
        }
    }

    @Override
    public boolean limiteTransferencia(double valor) {

        double limite = 300;

        if (valor <= limite) {

            return true;
        }

        System.out.println("Valor informado nao permitido para esta transacao");
        return false;
    }

    @Override
    public boolean verificaSaldo(double valor) {

        if (valor > saldo) {

            System.out.println("Saldo Insuficiente");

            return false;

        } 
        else 
        {
            return true;
        }
    }

    @Override
    public boolean verificaValorNegativo(double valor) {

        if (valor <= 0) {

            System.out.println("Você informou um valor inválido");

            return false;

        } 
        else
        {
            return true;
        }
    }

    @Override
    public boolean saca(double valor) {

        if (!limiteSaque(valor) || !verificaSaldo(valor) || !verificaValorNegativo(valor)) {

            return false;
        } 
        else
        {
            this.saldo -= valor + 0.2;

            return true;
        }

    }

    @Override
    public boolean transfere(double valor, Conta destino) {

        if (!limiteTransferencia(valor) || !verificaSaldo(valor) || !verificaValorNegativo(valor)) {

            return false;

        } 
        else
        {
            saldo -= valor;
            destino.deposita(valor);
            System.out.println("Foi realizado a transferencia para conta" + " " + destino.getNumero());
            return true;
        }
    }

    @Override
    public boolean deposita(double valor) {

        if (verificaValorNegativo(valor)) {
            this.saldo += valor;
            return true;
        } 
        else
        {
            return false;
        }
    }
}
solução!

Leonardo, acho que as condições no método transfere() estão trocadas.

A condição do "if" é de que o valor para transferência esteja dentro do limite, do saldo e que não seja inválido. Caso essas três condições sejam verdadeiras, a transferência deveria ser realizada, e não que fosse cancelada e retornase "false" como está no código agora.

Outra sujestão seria substituir algumas condições do "if" pelo método saca(). O método saca() já realiza dentro dele a verificação de valor negativo e saldo suficiente. Se você colocasse como condição do "if" que o valor transferido fosse abaixo do limite e o método saca() retorne "true" (que nesse caso o saque seja realizado), se as condições do limite e saque forem satisfeitas ao mesmo tempo, então o depósito seria realizado.

public boolean transfere(double valor, Conta destino) {

        if (limiteTransferencia(valor) || saca(valor)) {

            destino.deposita(valor);
            return true;

        }  else {

            return false;

        }
    }