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

Não imprime a mensagem da exceção

A minha classe TestaConta não está imprimindo a mensagem 'Saldo insuficiente!'

public class TestaConta {

    public static void main(String[] args) {

        Conta cc = new ContaCorrente();

        cc.deposita(100);
        System.out.println("Saldo: R$" + cc.getSaldo());

        try {
            cc.saca(110);
        } catch (RuntimeException e) {
            System.out.println("Saldo insuficiente!");
        }
        System.out.println("Saldo: R$" + cc.getSaldo());
    }
}
public class ContaCorrente extends Conta implements Tributavel{

    private double saldo;

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

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

    @Override
    public boolean saca(double valor) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
            return true;
        } else {
            return false;
        }
    }

    public void atualiza(double taxa) {
        this.saldo += this.saldo * taxa * 2;
    }

    @Override
    public double calculaTributos() {
        return this.getSaldo() * 0.01;
    }

}
4 respostas

Caso queira validar desse forma, você deve lançar a exceção no método saca() com a seguinte linha:

 throw new RuntimeException();

No caso de saldo insuficiente.

solução!

Fala Marcelo, tudo bem ?

O que ocorre é que o programa está preparado pra recuperar o sistema tratando e exception que o método saca pode lançar. Porém o método saca não lança a exception.

@Override
    public boolean saca(double valor) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
            return true;
        } else {
            return false;
        }
    }

O método apenas retorno um booleano, que não é capturado no retorno do método.

Tente fazer o saca lançar a Exception:

@Override
    public void saca(double valor) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
        } else {
            throw new IllegalArgumentException();
        }
    }

Espero ter ajudado. Abraço!

Isso mesmo que o Tiago explicou. Complementando a explicação, quando você faz:

try {
    codigo do try
}
catch (RuntimeException e) {
    codigo do catch
}

O código do catch só vai ser executado caso o código do try lance uma RuntimeException. Para resolver esse problema você pode usar a solução do Tiago (que força o lançamento de uma RuntimeException dentro do código do try) ou também usar um if para saber se o saldo é suficiente.

Entendido, jovens! O catch serve para pegar uma exceção. Se não for lançada nenhuma, não há o que pegar... Fiz o médtodo saca() lançar a exception e funcionou. Inclusive testei chamar o saca() fora do try/catch e, como não havia ninguém tratando a exceção, o programa parou. Há! Muito bom! Valeu!!