Planeje um conjunto de exceções a ser usado no jogo que está sendo desenvolvido. Isso envolve criar classes de exceções específicas para controlar falhas do jogo e montar pequenos testes ilustrativos conforme detalhado a seguir.
No exemplo a seguir, é criado um cenário de uma divisão inteira em que não é aceita uma divisão por 1, nem uma divisão que não gere um número inteiro. Note que este é um cenário fictício simplificado.
Segue abaixo o modelo de como deve ser documentado o plano de exceções. Tudo o que for indicado entre <...> indica algo que deve ser substituído pelo indicado. No modelo são colocados exemplos ilustrativos, que serão substituídos pelos do seu projeto.
<Elabore um diagrama com a hierarquia de exceções como detalhado abaixo>
<Monte uma tabela descritiva seguindo o exemplo>:
| Classe | Descrição |
|---|---|
| DivisaoInvalida | Engloba todas as exceções de divisões não aceitas. |
| DivisaoInutil | Indica que a divisão por 1 é inútil. |
| DivisaoNaoInteira | Indica uma divisão não inteira. |
Monte um código que teste a sua hierarquia exceções (todas elas) conforme o exemplo a seguir.
In [1]:
public class DivisaoInvalida extends Exception {
public DivisaoInvalida() {
super();
}
public DivisaoInvalida(String message) {
super(message);
}
}
Out[1]:
In [2]:
public class DivisaoInutil extends DivisaoInvalida {
public DivisaoInutil() {
super();
}
public DivisaoInutil(String message) {
super(message);
}
}
Out[2]:
In [3]:
public class DivisaoNaoInteira extends DivisaoInvalida {
public DivisaoNaoInteira() {
super();
}
public DivisaoNaoInteira(String message) {
super(message);
}
}
Out[3]:
In [4]:
public class Util {
public static int divide(int x, int y) throws DivisaoInvalida {
int divisao;
if (y == 1)
throw new DivisaoInutil("Esta divisao eh inutil");
if (x%y > 0)
throw new DivisaoNaoInteira("Esta divisao nao eh inteira");
divisao = x / y;
return divisao;
}
}
Out[4]:
In [5]:
// codigo testando a Excecao criada
int numerador = 8;
int denominador = 2;
System.out.println("=== Primeiro teste");
// testando uma divisao valida
try {
int divisao = Util.divide(numerador, denominador);
System.out.println("Resultado da divisao: " + divisao);
} catch (DivisaoInvalida erro) {
System.out.println("Ocorreu um erro nao esperado na divisao");
System.out.println(erro.getMessage());
} catch (Exception erro) {
System.out.println("Outro erro: " + erro.getMessage());
}
System.out.println("=== Segundo teste");
denominador = 1;
// testando a divisao inutil
try {
int divisao = Util.divide(numerador, denominador);
System.out.println("Resultado da divisao: " + divisao);
} catch (DivisaoInutil erro) {
System.out.println(erro.getMessage());
} catch (Exception erro) {
System.out.println("Outro erro: " + erro.getMessage());
}
System.out.println("=== Terceiro teste");
denominador = 3;
// testando a divisao nao inteira
try {
int divisao = Util.divide(numerador, denominador);
System.out.println("Resultado da divisao: " + divisao);
} catch (DivisaoNaoInteira erro) {
System.out.println(erro.getMessage());
} catch (Exception erro) {
System.out.println("Outro erro: " + erro.getMessage());
}
System.out.println("=== Quarto teste");
// testando a super classe
try {
int divisao = Util.divide(numerador, denominador);
System.out.println("Resultado da divisao: " + divisao);
} catch (DivisaoInvalida erro) {
System.out.println("Ocorreu um erro nao esperado na divisao");
System.out.println("--> " + erro.getMessage());
} catch (Exception erro) {
System.out.println("Outro erro: " + erro.getMessage());
}
Out[5]: