Boucle infinie dans un bloc try/catch avec InputMismatchException : une solution
Votre programme Java rencontre une boucle infinie lors de la gestion d'une exception InputMismatchException dans un essai /catch bloc tout en prenant une entrée entière de l’utilisateur. Ce comportement vient du fait qu'après avoir intercepté l'InputMismatchException, le scanner reste dans un état invalide, entraînant la répétition de la boucle indéfiniment.
Pour résoudre ce problème, vous devez effectuer les opérations suivantes dans le bloc catch :
catch (InputMismatchException e) { System.out.println("Error!"); input.next(); // Move to the next line to avoid the infinite loop }
La méthode input.next() fait avancer le pointeur du scanner vers la ligne suivante, éliminant ainsi toute entrée non valide qui a provoqué le exception.
Vous pouvez également utiliser la méthode hasNextInt() avant de tenter de lire un entier, garantissant ainsi que la valeur en cours de lecture est bien un entier. Cette approche élimine complètement le besoin de gestion des exceptions :
while (true) { if (input.hasNextInt()) { n1 = input.nextInt(); break; } else { input.next(); // Skip non-numeric input } }
N'oubliez pas que la documentation de Java Scanner indique qu'après la levée d'une exception InputMismatchException, le scanner ne transmettra pas le jeton responsable de l'exception, ce qui nécessite sa récupération. ou contourné par d'autres moyens. La mise en œuvre de ces modifications devrait atténuer le problème de boucle infinie dans votre programme Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!