Médio Java
Validação de idade com exceção personalizada
Enunciado
Crie uma exceção personalizada IdadeInvalidaException (checked) que represente idade fora do intervalo permitido (0 a 150). Escreva um método validarIdade(int idade) que lance essa exceção se a idade for inválida. No main, leia uma idade e trate a exceção, exibindo a mensagem de erro.
Requisitos
- A exceção
IdadeInvalidaExceptiondeve ser checked (herdar deException). - O método
validarIdadedeve declararthrows IdadeInvalidaException. - Se a idade for inválida, exiba
Idade inválida: X(onde X é a idade). - Se a idade for válida, exiba
Idade válida: X.
Código inicial
import java.util.Scanner;
// Defina a exceção personalizada aqui
public class ValidaIdade {
public static void validarIdade(int idade) /* throws ... */ {
// TODO: lance exceção se idade < 0 ou > 150
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int idade = sc.nextInt();
// TODO: chame validarIdade e trate a exceção
sc.close();
}
}
Saída esperada
Idade válida: 25
Idade inválida: -5
Ver dica
A exceção personalizada deve ter um construtor que receba uma mensagem e chame super(mensagem). No main, use try/catch para capturar IdadeInvalidaException.
Mostrar solução
import java.util.Scanner;
class IdadeInvalidaException extends Exception {
public IdadeInvalidaException(String mensagem) {
super(mensagem);
}
}
public class ValidaIdade {
public static void validarIdade(int idade) throws IdadeInvalidaException {
if (idade < 0 || idade > 150) {
throw new IdadeInvalidaException("Idade inválida: " + idade);
}
System.out.println("Idade válida: " + idade);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int idade = sc.nextInt();
try {
validarIdade(idade);
} catch (IdadeInvalidaException e) {
System.out.println(e.getMessage());
}
sc.close();
}
}
Passo a passo
- Definimos
IdadeInvalidaExceptionestendendoException(checked). - O construtor recebe uma mensagem e a repassa para
super. - O método
validarIdadedeclarathrows IdadeInvalidaException. - Se a idade estiver fora do intervalo,
throwlança a exceção com a mensagem. - Se a idade for válida, imprime a mensagem de sucesso.
- No
main, lemos a idade e chamamosvalidarIdadedentro de umtry. - O
catchcaptura a exceção e imprime a mensagem. - Fechamos o
Scanner.
Por que funciona
Como IdadeInvalidaException é checked, o compilador exige que ela seja tratada ou declarada. O throws na assinatura do método informa que ele pode lançar essa exceção, e o try/catch no main a trata. Isso garante que o programa não termine abruptamente e que o erro seja comunicado de forma clara.
Erros comuns
- Esquecer de declarar
throws: o código não compila, pois a exceção checked não é tratada. - Estender
RuntimeException: a exceção se torna unchecked e o compilador não exige tratamento, o que pode não ser o desejado. - Não chamar
super(mensagem): a mensagem não será armazenada egetMessage()retornaránull.
Outra forma de resolver
Você pode usar uma exceção unchecked (estendendo RuntimeException) se quiser evitar a obrigatoriedade de tratamento. No entanto, para validação de dados, checked é mais apropriada.
Saída esperada
Idade válida: 25
Idade inválida: -5