Porque quando entra no catch entra em loop infinito?

int n = 0;
        while (true) {
            System.out.println("Digite um numero: ");
            try {
                n = in.nextInt();
            } catch (InputMismatchException ex) {
                System.out.println("apenas numeros");
            }
        }

Oi @Hisaelguedes!
Na verdade, como tu pode observar o bloco do try/catch está dentro de um loop infinito (while(true)). O que tu poderia fazer é dar digitar um “continue” após imprimir o erro.

Já fiz isso e que esqueci de colocar ai

mesmo colocando o continue ele não deixa digitar o valor de novo

O método nextInt() não consome a quebra de linha gerada ao pressionar ENTER.
O único método que consome a quebra de linha é o nextLine().

Faça assim:

    String texto = null;
    int numero = 0;
    while (true) {
        System.out.println("Digite um numero: ");
        try {
            texto = in.nextLine();
            numero = Integer.parseInt(texto);
        } catch (InputMismatchException ex) {
            System.out.println(texto + " não é um número válido!");
        }
    }
2 curtidas

Esse código gera um erro

Resolvido esse código não gera mais o InputMismatchException

String texto = null;
    int numero = 0;
    while (true) {
        System.out.println("Digite um numero: ");
        try {
            texto = in.nextLine();
            numero = Integer.parseInt(texto);
        } catch (NumberFormatException ex) { //alteração
            System.out.println(texto + " não é um número válido!");
        }
    }

Na verdade o continue não resolverá, pois essa palavra reservada serve para pular para a próxima iteração e não para prao loop.
Use a palavra reservada break ao invés disso.

1 curtida