Eae pessoal, tava dando uma estudada em tratamento de exceções e me surgiram algumas dúvidas.
O código é este:
import java.util.InputMismatchException;
import java.util.Scanner;
public class DivideByZeroWithExceptionHandling {
public static int quociente(int numerador, int denominador)
throws ArithmeticException
{
return numerador / denominador;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean continuaLoop = true;
do {
try {
System.out.print("Entre com o numerador: ");
int numerador = input.nextInt();
System.out.print("Entre com o denominador: ");
int denominador = input.nextInt();
int resultado = quociente(numerador, denominador);
System.out.printf("%d / %d = %d ", numerador, denominador, resultado);
continuaLoop = false;
}
catch (ArithmeticException arithmeticException ) {
System.err.printf("\nErro: %s\n", arithmeticException);
System.out.println("Zero é um denominador invalido. Tente denovo.\n");
}
catch (InputMismatchException inputMismatchException) {
System.err.printf("\nErro: %s\n", inputMismatchException);
System.out.println("Não digite caracteres que não sejam números inteiros. Tente denovo.\n");
input.nextLine();
}
} while (continuaLoop);
}
}
1º Por que só o catch que trata o InputMismatchException precisa “limpar” o que o usuário digitou com o input.nextLine() ?
2º Se eu rodar esse código no eclipse - indigo aqui ele sai com um erro de execução depois que eu tento digitar um denominador como zero ou se digito uma String ao invés de um um int. O resultado é este( só muda o nome da exceção se eu colocar o denominador com zero ou uma String ao invés de um int ):
Erro: Zero é um denominador invalido. Tente denovo.
Entre com o numerador: java.lang.ArithmeticException: / by zero
Agora se eu mudar os System.err para System.out ele roda certinho.
Alguem poderia me explicar o que há de errado?