programmation Java (école d'ingénieur) · Chapitre 11 · Exercice de TD
Une pile qui proteste
Exceptions · niveau 2
Énoncé
Écrire une classe PileBornee d'entiers, de capacité fixée à la construction. Elle doit lever :
- une
IllegalArgumentExceptionsi la capacité demandée n'est pas strictement positive ; - une
IllegalStateException, avec un message précis, quand on empile dans une pile pleine ou qu'on dépile une pile vide.
Pourquoi des exceptions non vérifiées ?
Corrigé
class PileBornee {
private final int[] t;
private int n = 0; // t[0:n] contient la pile
PileBornee(int capacite) {
if (capacite <= 0) throw new IllegalArgumentException("capacité " + capacite + " : doit être > 0");
t = new int[capacite];
}
void empiler(int x) {
if (n == t.length) throw new IllegalStateException("pile pleine (" + n + " éléments), " + x + " refusé");
t[n++] = x;
}
int depiler() {
if (n == 0) throw new IllegalStateException("pile vide");
return t[--n];
}
}
Un programme de test qui empile dans une pile de capacité , la vide puis tente un dépilement de trop, et enfin crée une pile de capacité , en rattrapant chaque exception :
pile pleine (2 éléments), 3 refusé
2 1
pile vide
capacité 0 : doit être > 0
Ces exceptions sont non vérifiées parce qu'elles signalent une erreur d'utilisation : un programme correct sait si sa pile est vide avant de dépiler. Obliger tous les utilisateurs à écrire un try / catch autour de chaque depiler() serait absurde. C'est la même logique que pour les tableaux, dont les accès hors bornes lèvent une exception non vérifiée.
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.