programmation Java (école d'ingénieur) · Chapitre 11 · Exercice de TD
Garder la cause
Exceptions · niveau 3 (difficile)
Énoncé
Un fichier de notes contient des lignes de la forme « nom;note ». Écrire une méthode String lire(String ligne) qui renvoie « nom a note », et lève une exception vérifiée FormatException (à écrire) si la ligne n'a pas deux champs, ou si la note n'est pas un nombre. Dans ce dernier cas, la NumberFormatException d'origine doit être conservée comme cause. Tester sur « Alice;12.5 », « Bruno;quinze » et « Chloé ».
Corrigé
class FormatException extends Exception {
FormatException(String message, Throwable cause) { super(message, cause); }
}
static String lire(String ligne) throws FormatException {
String[] champs = ligne.split(";");
if (champs.length != 2)
throw new FormatException("« " + ligne + " » : 2 champs attendus", null);
try {
double note = Double.parseDouble(champs[1]);
return champs[0] + " a " + note;
} catch (NumberFormatException e) {
throw new FormatException("« " + ligne + " » : note illisible", e); // e devient la cause
}
}
Le programme de test appelle lire sur chaque ligne et, en cas de FormatException, affiche son message puis sa cause (e.getCause()) quand elle existe :
Alice a 12.5
Ligne rejetée : « Bruno;quinze » : note illisible
cause : java.lang.NumberFormatException: For input string: "quinze"
Ligne rejetée : « Chloé » : 2 champs attendus
L'appelant reçoit une exception qui parle son langage (« ligne rejetée »), sans perdre le détail technique : le constructeur Exception(String message, Throwable cause) garde l'exception d'origine, et une trace de pile complète l'afficherait sous la mention Caused by.
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.