2
respostas

exceções e controle de erros - exercicio 9

import javax.management.RuntimeErrorException;

abstract class Conta {                                                                                                                           
//  private double saldo;
    protected double saldo;

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

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

    public boolean saca(double valor_saque) throws Exception {
        if (this.saldo < valor_saque) {
            //return false;
            throw new SaldoInsuficienteException(saldo);
        }
        else {
            this.saldo = this.saldo - valor_saque;
            return true;
        }
    };

   public void deposita(double valor_dep) {                                                                                                   
       if (valor_dep > 0) { 
           this.saldo += valor_dep;
       }
       else  {
           throw new IllegalArgumentException("Você tentou depositar" + " um valor negativo");
       }
    };      

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

class TestaContas {
    public static void main(String[] args) {
//      Conta c = new Conta(); //este codigo não funciona porque a classe Conta passou a ser abstrata
        ContaCorrente cc = new ContaCorrente();
        ContaPoupanca cp = new ContaPoupanca();

//      c.deposita(1000); 
        cc.deposita(1000); 
//      cp.deposita(1000);
//
        try {
            cp.deposita(-1000);
        } 
        catch (IllegalArgumentException e) {
            System.out.println("Você tentou depositar um valor inválido");
        }

//        

//      c.atualiza(0.01);
        cc.atualiza(0.01);
        cp.atualiza(0.01);


//      
         try {
             cc.saca(10000);
             System.out.println("Saque Efetudado com sucesso");    
        } //catch (RuntimeException e) {pode ser assim
         catch (SaldoInsuficienteException e) { //ou assim -- usando a classe cariada por nós
             //System.out.println(cc.getSaldo() + " Saldo insufuciente");
              System.out.println(cc.getSaldo() + " Saldo insufuciente");
         }
         catch (Exception e) { //ou assim
            //System.out.println(cc.getSaldo() + " Saldo insufuciente");
             System.out.println("Ocorreu um erro indeterminado");
        }

//      System.out.println(c.getSaldo());
        System.out.println(cc.getSaldo());
        System.out.println(cp.getSaldo());

        System.out.printf("O saldo é: %.2f", cc.getSaldo());
        System.out.printf("O saldo é: %.2f", cp.getSaldo());
    }
}

não funcionou como esperado, o erro não apareceu

2 respostas

Boa noite Luiz, aparentemente o erro está no }; repare que você esta usando ponto e virgula depois de fechar o } você abre o metodo com o { e fecha com o } e não é necessário ; verifica e manda o retorno para gente ver

import javax.management.RuntimeErrorException;

abstract class Conta {                                                                                                                           
//  private double saldo;
    protected double saldo;

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

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

    public boolean saca(double valor_saque) throws Exception {
        if (this.saldo < valor_saque) {
            //return false;
            throw new SaldoInsuficienteException(saldo);
        }
        else {
            this.saldo = this.saldo - valor_saque;
            return true;
        }
    }

   public void deposita(double valor_dep) {                                                                                                   
       if (valor_dep > 0) { 
           this.saldo += valor_dep;
       }
       else  {
           throw new IllegalArgumentException("Você tentou depositar" + " um valor negativo");
       }
    }      

   //public void atualiza(double taxa) {                                                                                                   
   //     this.saldo += (this.saldo * taxa);                                                                                                       
   // };       
    abstract public void atualiza(double taxa);    
} 
---
class ContaCorrente extends Conta implements Tributavel {
      public void atualiza(double taxa) {
             this.saldo += this.saldo * taxa * 2;
      }

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

----

class ContaPoupanca extends Conta {

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

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

}

--
class TestaContas {
    public static void main(String[] args) {
//      Conta c = new Conta(); //este codigo não funciona porque a classe Conta passou a ser abstrata
        ContaCorrente cc = new ContaCorrente();
        ContaPoupanca cp = new ContaPoupanca();

//      c.deposita(1000); 
        //cc.deposita(1000); 
//      cp.deposita(1000);
//
        try {
            cc.deposita(-1000);
        } 
        catch (IllegalArgumentException e) {
            System.out.println("Você tentou depositar um valor inválido na sua conta corrente");
        }

        try {
            cp.deposita(1000);
        } 
        catch (IllegalArgumentException e) {
            System.out.println("Você tentou depositar um valor inválido na sua conta popupança");
        }

//        

//      c.atualiza(0.01);
        cc.atualiza(0.01);
        cp.atualiza(0.01);


//      
         try {
             cc.saca(10000);
             System.out.println("Saque Efetudado com sucesso");    
        } //catch (RuntimeException e) {pode ser assim
         catch (SaldoInsuficienteException e) { //ou assim -- usando a classe cariada por nós
             //System.out.println(cc.getSaldo() + " Saldo insufuciente");
              System.out.println(cc.getSaldo() + " Saldo insufuciente");
         }
         catch (Exception e) { //ou assim
            //System.out.println(cc.getSaldo() + " Saldo insufuciente");
             System.out.println("Ocorreu um erro indeterminado");
        }

//      System.out.println(c.getSaldo());
        System.out.println(cc.getSaldo());
        System.out.println(cp.getSaldo());

        System.out.printf("O saldo cc é: %.2f", cc.getSaldo());
        System.out.printf("O saldo cp é: %.2f", cp.getSaldo());
    }
}

Acredito que o problerma não é o ";", fiz um teste colocando try em cc.deposita, que utiliza o mesmo método de cp.deposita que apresenta outro comportamento.

try { cc.deposita(-1000); } catch (IllegalArgumentException e) { System.out.println("Você tentou depositar um valor inválido na sua conta corrente"); }

try { cp.deposita(1000); } catch (IllegalArgumentException e) { System.out.println("Você tentou depositar um valor inválido na sua conta popupança"); } Você tentou depositar um valor inválido na sua conta corrente 0.0 Saldo insufuciente 0.0 1029.897 O saldo cc é: 0,00O saldo cp é: 1029,90

try { cc.deposita(1000); } catch (IllegalArgumentException e) { System.out.println("Você tentou depositar um valor inválido na sua conta corrente"); }

try { cp.deposita(-1000); } catch (IllegalArgumentException e) { System.out.println("Você tentou depositar um valor inválido na sua conta popupança"); } 1020.0 Saldo insufuciente 1020.0 -1030.103 O saldo cc é: 1020,00O saldo cp é: -1030,10