5.12 Problèmes et solutions

Dans la vidéo précédente, nous avons utilisé la classe Scanner pour qu'un utilisateur saisisse son nom et son année de naissance. Mais cette saisie peut poser problème, par exemple si l'utilisateur entre un nombre négatif. Testons : si on lance le programme et qu'on saisit -20 comme année de naissance, le programme indique que l'on a 2041 ans, ce qui est évidemment faux.

Valider une plage de valeurs avec une condition

Il faut donc ajouter une condition qui vérifie que l'année de naissance correspond à un âge cohérent, par exemple compris entre 0 et 100 ans. Juste après le calcul de la variable age, on écrit :

if (age >= 0 && age <= 100) {
    System.out.println("Votre nom est : " + name + " et vous avez " + age + " ans");
} else {
    System.out.println("Annee de naissance invalide");
}

En relançant le programme, on voit bien que l'année de naissance est désormais signalée comme invalide. Reste un autre cas à traiter : l'utilisateur qui tape des lettres au lieu d'un nombre. Pour cela, on utilise la méthode scanner.hasNextInt(), qui renvoie un booléen indiquant si la prochaine saisie peut bien être lue comme un entier.

Juste après l'affichage « Entrez votre année de naissance », on déclare boolean hasNextInt = scanner.hasNextInt();. Si hasNextInt est vrai, on peut poursuivre le calcul et appliquer la condition précédente. Sinon, dans un bloc else, on affiche par exemple « Impossible d'analyser l'année de naissance ». On exécute alors le programme : si on tape une lettre, le message d'erreur s'affiche, et si on saisit 60 avec un nom, on obtient bien la validation appropriée. C'était tout pour cette vidéo, nous avons vu les principaux types d'erreurs liés à la saisie, à la prochaine !

En résumé

Cette leçon enseigne comment gérer les problèmes courants lors de la saisie d'entrées utilisateur en Java. Elle couvre deux cas d'erreur : les valeurs négatives ou hors plage (ex : année de naissance), et les entrées non-numériques. Pour chaque problème, une solution pratique est présentée : ajouter une condition de validation et utiliser la méthode hasNextInt() du scanner pour vérifier le type d'entrée avant le traitement.

Points clés

  • Valider les entrées utilisateur : vérifier que les valeurs sont dans une plage acceptable (ex : âge entre 0 et 100) pour éviter les calculs aberrants
  • Utiliser hasNextInt() du scanner pour contrôler que l'utilisateur a saisi un nombre entier avant de le traiter
  • Afficher des messages d'erreur explicites à l'utilisateur quand les données saisies sont invalides ou du mauvais type
  • Combiner les vérifications de type et de plage pour une validation robuste des entrées
  • Tester le code avec des cas d'erreur (nombres négatifs, lettres) pour vérifier que les validations fonctionnent correctement

Questions fréquentes

Pourquoi obtient-on un résultat aberrant (ex : 2041 ans) quand l'utilisateur entre un nombre négatif ?

Sans validation, une année de naissance négative (ex : -20) produit un calcul faux. En Java, 2026 - (-20) = 2046. D'où l'importance d'ajouter une condition if pour rejeter les valeurs en dehors d'une plage acceptable (ex : entre 0 et 100).

Quelle est la différence entre vérifier le type (hasNextInt) et vérifier la plage (if age >= 0 && age <= 100) ?

hasNextInt() vérifie QUE l'entrée est un entier valide (rejette les lettres et caractères spéciaux). La condition if vérifies que la VALEUR est logiquement valide (dans la bonne plage). Les deux sont nécessaires pour une validation complète.

Que se passe-t-il si l'utilisateur entre une lettre ou un symbole ?

Sans hasNextInt(), le programme plante ou produit une erreur. Avec hasNextInt(), la vérification retourne false, et on affiche un message d'erreur explicite (ex : 'Impossible d'analyser le chiffre') avant d'essayer de continuer.