Porque quando entra no catch entra em loop infinito?

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

7 Respostas

elvex

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.

H

Já fiz isso e que esqueci de colocar ai

H

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

staroski

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!");
        }
    }
H

Esse código gera um erro

H

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!");
        }
    }
Marcus_Gp

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.

Criado 2 de janeiro de 2018
Ultima resposta 3 de jan. de 2018
Respostas 7
Participantes 4