"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment éviter les boucles infinies lors de la gestion d'InputMismatchException en Java ?

Comment éviter les boucles infinies lors de la gestion d'InputMismatchException en Java ?

Publié le 2024-12-23
Parcourir:554

How to Prevent Infinite Loops When Handling InputMismatchException in Java?

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 provient du fait qu'après avoir intercepté l'InputMismatchException, le scanner reste dans un état non valide, 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 à l'origine de l'exception.

Vous pouvez également utiliser la méthode hasNextInt() avant tenter de lire un entier, garantissant ainsi que la valeur lue 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écessitera qu'il soit récupéré 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3