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.
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