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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.