Adloun

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 IllegalArgumentException si 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

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 →