Erro besta em java

Preciso de ajuda: Enquanto o usuário não digitar um número inteiro, voltar pro loop while no ‘‘catch’’.

System.out.println("Digite um dos números abaixo e seleciona uma matéria: ");
        System.out.println("1 - Matemática");
        System.out.println("2 - História");
        System.out.println("3 - Inglês");
        materia = input.nextInt();
        try {
            do {
                System.out.print("Número digitado não é valido Digite novamente: ");
                materia = input.nextInt();
            } while (materia >= 4);
        } catch (Exception e) {
            do {
                System.out.println("Comando inválido! Digite um número inteiro: ");
                materia = input.nextInt();
            } while(materia) // preciso de um comando de repetição que enquanto o usuário digitar //caracteres voltar pro loop while.
        }

Está é uma forma de se fazer:

import java.util.Scanner;

class Main {
  private static final Scanner input = new Scanner(System.in);

  public static void main(String... args) {
    System.out.println("Digite um dos números abaixo e seleciona uma matéria: ");
    System.out.println("1 - Matemática");
    System.out.println("2 - História");
    System.out.println("3 - Inglês");

    int materia = getInt();

    System.out.println("A matéria selecionada foi: " + materia);
  }

  private static int getInt() {
    while (true) {
      try {
        int materia = Integer.parseInt(input.nextLine());

        if (materia >= 1 && materia <= 3) {
          return materia;
        }

        System.out.print("Número digitado não é valido Digite novamente: ");
      } catch (NumberFormatException e) {
        System.out.print("Comando inválido! Digite um número inteiro: ");
      }
    }
  }
}

Preferi usar Integer.parseInt(input.nextLine()) ao invés de input.nextInt() porque eu acho que assim é mais elegante e também é menos problemático.

1 curtida