"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como evitar loops infinitos ao lidar com InputMismatchException em Java?

Como evitar loops infinitos ao lidar com InputMismatchException em Java?

Publicado em 23/12/2024
Navegar:331

How to Prevent Infinite Loops When Handling InputMismatchException in Java?

Loop infinito no bloco try/catch com InputMismatchException: uma solução

Seu programa Java encontra um loop infinito ao manipular uma InputMismatchException em um try /catch bloco enquanto recebe entrada inteira do usuário. Esse comportamento decorre do fato de que após capturar a InputMismatchException, o scanner permanece em um estado inválido, levando à repetição do loop indefinidamente.

Para resolver esse problema, você deve realizar as seguintes operações dentro do bloco catch :

catch (InputMismatchException e) {
    System.out.println("Error!");
    input.next(); // Move to the next line to avoid the infinite loop
}

O método input.next() avança o ponteiro do scanner para a próxima linha, descartando efetivamente qualquer entrada inválida que causou a exceção.

Como alternativa, você pode utilizar o método hasNextInt() antes tentar ler um número inteiro, garantindo assim que o valor que está sendo lido é de fato um número inteiro. Essa abordagem elimina completamente a necessidade de tratamento de exceções:

while (true) {
    if (input.hasNextInt()) {
        n1 = input.nextInt();
        break;
    } else {
        input.next(); // Skip non-numeric input
    }
}

Lembre-se, a documentação do Java Scanner afirma que após uma InputMismatchException ser lançada, o scanner não passará o token responsável pela exceção, exigindo que ele seja recuperado ou ignorado por outros meios. A implementação dessas modificações deve mitigar o problema do loop infinito em seu programa Java.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3