Como posso criar uma exceção que verifica o intervalo int, o tipo de número e não um caractere?

Eu estou tentando quebrar a cabeça em torno de exceções e o problema que estou correndo é que eu estou sendo obrigado a criar um programa que pede input do usuário para um número 9-99. Esse número deve ser verificado por erros usando 3 exceções diferentes.

e1: o número está fora do intervalo (200)

e2: number é de um tipo de dados diferente de integer (double)

e3: input é outro tipo de dados diferente de number (char)

Eu tentei criar padrões na minha estrutura if para fazer todos os três funcionarem, no entanto eu não consigo diferenciar entre e2 e e3. Sempre será o padrão para e2. Isso é o que tenho com apenas duas exceções, mas agradeceria muito a ajuda para descobrir como implementar o terceiro. Obrigado.

public static void main(String[] args) { Scanner input = new Scanner(System.in); boolean tryAgain = true; do { try { System.out.println("Please enter an integer between 9 and 99: "); int inInt = input.nextInt(); if (inInt >= 9 && inInt <= 99){ System.out.println("Thank you. Initialization completed."); tryAgain = false; } else if (inInt  99){ throw new NumberFormatException("Integer is out of range."); } } catch (NumberFormatException e1) { // Range check System.out.println("* The number you entered is not between 9 and 99. Try again."); System.out.println(); input.nextLine(); } catch (InputMismatchException e2) { // Something other than a number System.out.println("* You did not enter an integer. Try again."); System.out.println(); input.nextLine(); } } while(tryAgain); } 

}

Aqui está a saída que recebo agora:

Por favor digite um número inteiro entre 9 e 99: 2

  • O número typescript não está entre 9 e 99. Tente novamente.

Por favor, digite um número inteiro entre 9 e 99: f

  • Você não inseriu um inteiro. Tente novamente.

Por favor, insira um número inteiro entre 9 e 99: 88

Obrigado. Inicialização concluída.

https://www.ideone.com/ZiOpGH

Em catch (InputMismatchException e2) , teste para ver se input.hasNextDouble() (ou input.hasNextFloat() ? Não tenho certeza qual é mais geral …) é true. Se for, então você pode distinguir entre o caso ‘usuário inserido um duplo’ e ‘usuário inserido um tipo não numérico’

Se você tem que detectar três circunstâncias, você precisa ter três conjuntos de lógica.

  1. Verifique se os caracteres inseridos são um valor numérico válido.
  2. Verifique se o número typescript é um inteiro.
  3. Verifique se o número inserido está entre os limites baixo e alto.

E você praticamente tem que verificá-los nessa ordem.

O scanner possui convenientemente os methods hasXXX para ver se os caracteres prestes a serem lidos correspondem a um determinado padrão.