Adloun

programmation Java (école d'ingénieur) · Chapitre 11 · Application directe du cours

Saisir une note

Exceptions · niveau 2

Énoncé

Écrire une méthode static double lireNote(Scanner sc) qui demande une note sur jusqu'à obtenir un nombre (éventuellement décimal, avec un point) compris entre et , en expliquant chaque refus. L'essayer avec un Scanner qui lit successivement les lignes « quinze », « 25 », une ligne vide, puis « 14.5 ».

Corrigé

On sépare les deux causes de refus : un texte qui n'est pas un nombre (exception de Double.parseDouble) et un nombre hors de l'intervalle (simple test).


static double lireNote(Scanner sc) {
    while (true) {
        System.out.print("Note sur 20 : ");
        String ligne = sc.nextLine().trim();
        try {
            double n = Double.parseDouble(ligne);
            if (n >= 0 && n <= 20) return n;
            System.out.println(n + " n'est pas entre 0 et 20");
        } catch (NumberFormatException e) {
            System.out.println("« " + ligne + " » n'est pas un nombre");
        }
    }
}

Avec new Scanner("quinze\n25\n\n14.5\n") :


Note sur 20 : « quinze » n'est pas un nombre
Note sur 20 : 25.0 n'est pas entre 0 et 20
Note sur 20 : «  » n'est pas un nombre
Note sur 20 : Note retenue : 14.5

La boucle while (true) ne se termine que par le return. Les réponses tapées n'apparaissent pas à l'écran parce qu'elles viennent ici d'une chaîne ; au clavier, elles s'afficheraient après chaque « Note sur 20 : ». La ligne vide est bien refusée : Double.parseDouble("") lève une NumberFormatException.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →