Gestion des Entrées


Quand tu lis des données avec Scanner, l’utilisateur peut taper n’importe quoi 😅 → Tu dois donc vérifier le type de donnée avant de la lire.

C’est ici que les méthodes hasNext...() entrent en jeu.


🕵️ Les méthodes de vérification

MéthodeVérifie si…Exemple de lecture
hasNextInt()la prochaine donnée est un int ?42
hasNextDouble()la prochaine donnée est un double ?3.14
hasNextBoolean()la prochaine donnée est un booléen ?true / false
hasNext()il reste du texte à lire ?n’importe quoi

⚡ Exemple : validation d’un entier

Voici un exemple de programme qui demande un entier et vérifie la saisie :

import java.util.Scanner;

public class LectureSecurisee {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("Entre un nombre entier : ");

        while (!sc.hasNextInt()) {
            System.out.println("❌ Ce n’est pas un entier !");
            System.out.print("Essaie encore : ");
            sc.nextLine(); // on ignore la mauvaise entrée
        }

        int nombre = sc.nextInt();
        System.out.println("✅ Merci ! Tu as entré : " + nombre);

        sc.close();
    }
}

🧠 Explication :

  • hasNextInt() vérifie la prochaine donnée
  • Tant que ce n’est pas un entier → on affiche un message d’erreur
  • sc.nextLine() sert à vider l’entrée incorrecte avant de recommencer

🧮 Exemple avec un double

System.out.print("Entre un nombre décimal : ");

while (!sc.hasNextDouble()) {
    System.out.println("❌ Ce n’est pas un nombre décimal !");
    System.out.print("Essaie encore : ");
    sc.nextLine();
}

double valeur = sc.nextDouble();
System.out.println("✅ Tu as entré : " + valeur);

🧠 Astuce : regrouper la validation dans une fonction

Pour éviter de répéter le même code, tu peux créer une méthode utilitaire :

public static int lireEntier(Scanner sc) {
    while (!sc.hasNextInt()) {
        System.out.println("❌ Erreur : entre un entier valide !");
        sc.nextLine();
    }
    return sc.nextInt();
}

Et l’utiliser simplement :

System.out.print("Âge : ");
int age = lireEntier(sc);

🧪 Exercice 1 : âge valide

Objectif : Lire un âge (entier positif).

🧾 Consignes :

  • Utilise hasNextInt() pour t’assurer que c’est un entier.
  • Si ce n’est pas un entier, redemande.
  • Si l’âge est négatif, redemande aussi.
  • Affiche : "Tu as X ans."

🎯 Exercice 2 : note sur 100

Objectif : Lire une note décimale entre 0 et 100.

🧾 Consignes :

  • Utilise hasNextDouble()
  • Vérifie que la note est entre 0 et 100
  • Si la saisie est invalide, redemande

📦 À retenir

  • hasNext...() permet de vérifier le type de la donnée suivante
  • Toujours vider l’entrée incorrecte avec next()
  • Combine avec une boucle while pour redemander une saisie valide
  • 🔒 Rend ton programme plus robuste et plus convivial