5.14 Min et Max Challenge

Cliquez içi pour plus de vidéos disponibles sur notre chaine youtube !

C'est l'heure du prochain défi : le défi minimum et maximum. L'objectif est de lire des nombres entrés au clavier par l'utilisateur, puis d'afficher la plus petite et la plus grande valeur saisies. Par exemple, si l'utilisateur entre 5, 3 puis 2, le minimum sera 2 et le maximum sera 5. Avant chaque saisie, on affiche le message « Entrez un nombre ». Si l'utilisateur entre une valeur invalide (par exemple une lettre), on sort de la boucle et on affiche le min et le max. On utilisera une boucle while et la classe Scanner vue dans la vidéo précédente.

Solution avec while true et hasNextInt

On crée d'abord un objet Scanner, en pensant à importer la classe. Pour éviter d'oublier la fermeture du scanner, on écrit scanner.close() tout de suite à la ligne suivante, on remplira le reste entre les deux. On déclare ensuite deux variables : min initialisée à Integer.MAX_VALUE (la plus grande valeur qu'un int peut contenir) et max initialisée à Integer.MIN_VALUE.

On boucle ensuite jusqu'à ce que l'utilisateur saisisse une valeur invalide grâce à while (true), une boucle infinie que l'on arrêtera à l'aide d'une instruction break. Avant chaque tour, on affiche « Entrez un nombre », puis on teste la validité de la saisie avec la méthode scanner.hasNextInt() stockée dans un booléen.

Scanner scanner = new Scanner(System.in);
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;

while (true) {
    System.out.println("Entrez un nombre");
    boolean isInt = scanner.hasNextInt();
    if (!isInt) break;
    int number = scanner.nextInt();
    if (number > max) max = number;
    if (number < min) min = number;
}

System.out.println("min = " + min);
System.out.println("max = " + max);
scanner.close();

Si le booléen est faux, on sort de la boucle avec break. Sinon, on lit le nombre avec scanner.nextInt() et on effectue deux comparaisons : si le nombre dépasse max, on met à jour max ; s'il est inférieur à min, on met à jour min. À la sortie de la boucle, on affiche le minimum et le maximum. En testant avec plusieurs nombres puis une lettre, on voit que les valeurs min et max sont correctement calculées. À la prochaine !

En résumé

Ce défi Java consiste à créer un programme qui lit une série de nombres saisis par l'utilisateur via la console et détermine automatiquement le nombre minimum et le nombre maximum parmi toutes les valeurs entrées. Le programme utilise une boucle while infinie avec un contrôle de validité des entrées pour s'arrêter lorsqu'une valeur non-numérique est détectée.

Points clés

  • Utiliser une boucle while infinie (boucle infinie stoppée par break) pour lire les nombres de l'utilisateur
  • Valider chaque entrée avec la méthode hasNextInt() du Scanner pour vérifier que c'est un nombre valide
  • Initialiser les variables min et max (min à une très haute valeur, max à une très basse valeur) pour permettre la comparaison correcte avec les nombres saisis
  • Comparer chaque nombre saisi avec les valeurs actuelles de min et max pour mettre à jour les extrêmes
  • Utiliser l'instruction break pour sortir de la boucle lorsque l'utilisateur entre un caractère invalide (lettre ou caractère spécial)

Questions fréquentes

Comment arrêter la boucle infinie dans ce défi ?

La boucle s'arrête automatiquement lorsque l'utilisateur entre un caractère qui n'est pas un nombre. On utilise la méthode hasNextInt() du Scanner pour tester la validité, et l'instruction break pour quitter la boucle immédiatement si l'entrée n'est pas valide.

Pourquoi initialiser min et max à des valeurs extrêmes ?

On initialise min à une très haute valeur (par défaut Integer.MAX_VALUE) et max à une très basse valeur (par défaut Integer.MIN_VALUE) pour garantir que le premier nombre saisi remplace correctement ces valeurs initiales lors des comparaisons.

Quelle différence avec les défis précédents ?

Ce défi introduit la logique de recherche de minimum et maximum en mettant à jour deux variables au fur et à mesure que les nombres sont entrés, et ajoute une validation stricte des entrées pour terminer le programme proprement.