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

Dúvida no Ex. 8 da Aula 5 - Exceções e controle de erros

Não entendi, no meu método deposita da classe conta vai ficar assim:

    public void deposita(double valorDeposito) {

        if (valorDeposito < 0) {
            throw new IllegalArgumentException();
        } else {

            this.saldo += valorDeposito;
        }

E na classe TestaDeposita ficaria desse jeito, não esta funcionando a mensagem

package br.com.nicolicontabil.alura;

import java.util.concurrent.ForkJoinPool.ManagedBlocker;

public class TestaDeposita {
    public static void main(String[] args) {
        Conta cp = new ContaCorrente("Laerdes", 123, 100);
        try {
            cp.deposita(-100);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Valor para deposito invalido " + e.getMessage());
        }
    }
}
4 respostas

Olá Laercio! Não está funcionando porque em seu catch você adicionou uma ArrayIndexOutOfBoundsException e está sendo lançada uma IllegalArgumentException. Repare no seu código:

throw new IllegalArgumentException();

Para funcionar o correto seria seu catch ficar da seguinte forma:

catch (IllegalArgumentException e)

Espero ter ajudado. Bons estudos!

Ok, agora esta aparecendo a mensagem porém achei que iria aparecer a mensagem assim:

Valor para deposito invalido -100 mas esta vindo a mensagem assim Valor para deposito invalido null

O que poderia fazer

solução!

O método getMessage() da classe Exception pega a String passada como argumento no construtor da classe. Por você não ter passando nenhuma String essa por padrão recebe o valor null. Por isso sua mensagem está aparecendo assim.

Para mostrar o valor que foi colocado errado você tem duas opções: A primeira é passar a mensagem de erro no construtor da Exception e no catch apenas imprimir o getMessage(). Da seguinte forma:

public void deposita(double valorDepositado) {
        if (valorDepositado < 0) {
            throw new IllegalArgumentException("Valor para deposito invalido " + valorDepositado);
        } else {
            this.saldo += valorDepositado;
        }
    }
public class TestaDeposita {
    public static void main(String[] args) {
        Conta cp = new ContaCorrente("Laerdes", 123, 100);
        try {
            cp.deposita(-100);
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }
    }
}

A segunda opção é fazer como você fez, porem passando apenas ao valor como argumento no construtor da Exception. Porem é necessário fazer a conversão do valor para String, ficando assim:

public void deposita(double valorDepositado) {
        if (valorDepositado < 0) {
            throw new IllegalArgumentException(Double.toString(valorDepositado));
        } else {
            this.saldo += valorDepositado;
        }
    }
public class TestaDeposita {
    public static void main(String[] args) {
        Conta cp = new ContaCorrente("Laerdes", 123, 100);
        try {
            cp.deposita(-100);
        } catch (IllegalArgumentException e) {
            System.out.println("Valor para deposito invalido " + e.getMessage());
        }
    }
}

Mesmo mostrando os códigos, ainda continuo com os mesmo problema o Laercio. No meu caso nenhuma mensagem é exibida.