Page Home (contact) Retour TPs
Etagere
et notez les noms
de l'exception levée. Remarquez le "2" qui suit le nom de l'exception qui indique la taille du tableau dans lequel on a voulu ajouter un élément avec un mauvais index. Etudiez aussi ce qui est affiché, avec les lignes qui ont conduit à l'exception. Il est important de bien lire les messages d'erreur pour corriger ensuite plus rapidement les erreurs.main
qui appelle la méthode ajouter
.
Dans votre message d'erreur, ajoutez l'affichage de la pile des appels de méthodes
qui a conduit à l'erreur (méthode printStackTrace()
de Throwable
). Testez. Remarquez que l'exception n'interrompt pas l'exécution puisque la description de l'étagère est bien affichée par la dernière instruction de la méthode main
(l'affichage du message d'erreur peut être entremêlé avec l'affichage de la description mais la descritption est bien affichée).Écrivez votre propre classe d'exception EtagerePleineException pour ce type d'exception. Cette exception sera une exception contrôlée par le compilateur.
Un attribut privé de cette classe sera une référence vers l'étagère qui a provoqué le problème. Ajoutez un getter pour cet attribut ; les méthodes qui utiliseront Etagere (en dehors de Etagere) pourront ainsi afficher des messages du type "Impossible d'ajouter un livre à cette étagère car elle ne peut contenir que 6 livres".
Récrivez la méthode ajouter pour qu'elle utilise
cette nouvelle exception. L'exception doit être levée si on veut ajouter dans une étagère pleine. Comme on l'a vu dans le cours, il vaut mieux utiliser un if
plutôt que d'attraper l'exception lancée jusqu'à maintenant. La méthode ajouter doit lancer l'exception EtagerePleineException (voir section suivante).
Modifiez la méthode main pour tenir compte de EtagerePleineException. Elle affichera le message d'erreur suivant : "Impossible d'ajouter un livre à cette étagère car elle ne peut contenir que xx livres". "xx" sera "2" pour ce cas particulier. La pile d'exécution ne sera plus affichée.
Les exceptions doivent être traitées par la méthode qui en sait assez pour prendre la bonne décision.
Par exemple, il serait mauvais de traiter le problème dans la méthode ajouter qui ne peut prendre la bonne décision : elle ne sait pas comment résoudre le problème si on lui dit d'ajouter un livre dans une étagère pleine. Elle laisse donc remonter l'exception à la méthode qui l'a appelée.
Pour illustrer
cela, écrivez une classe Librairie. Cette classe a une variable d'instance etageres
de type ArrayList<Etagere> qui contient une liste des étagères qui vont servir à ranger des livres. Quand une instance de la classe Librairie est créée, une étagère est ajoutée à la liste. Le nombre de livres que l'on peut ranger dans une étagère est rangé dans une constante (final
) TAILLE_ETAGERES
de la classe (fixez-la à 2 pour ne pas avoir à ajouter trop de livres pendant les tests).
Pour créer une instance d'une telle liste : ArrayList<Etagere> etageres = new ArrayList<>();
Pour ajouter une étagère dans une telle liste : etageres.add(etagere);
Pour avoir la dernière étagère de la liste (l'étagère qui a été ajoutée le plus récemment) : etageres.get(etageres.size() - 1)
. La valeur etageres.size()
retourne le nombre d'éléments dans la liste et les éléments de la liste sont numérotés de 0 à size() - 1
.
La classe Librairie
possède une
méthode ajouterLivre qui ajoute un livre dans les étagères.
Si la dernière étagère ajoutée dans la liste est pleine alors que l'on veut ajouter un livre on crée une nouvelle étagère, on l'ajoute dans la liste des étagères et on ajoute le livre dans cette étagère.
La classe Librairie
a une méthode afficheLivres
qui affiche
tous les livres qui ont été ajoutés.
Pour tester vous ajouterez au moins 7 livres. Vous appellerez ensuite afficheLivres
.
Classe Librairie
Classe Etagere
Classe EtagerePleineException
Cet exercice est optionnel.
Élu par cette crapule.Ca vous dit quelque chose ? Ce sont des palindromes : ils peuvent être lus de la gauche vers la droite ou de la droite vers la gauche (on ne tient pas compte de la ponctuation, des accents ou des espaces blancs).
Ésope reste ici et se repose.
Tu l'as trop écrasé, César, ce Port-Salut...
Écrivez une classe Palindrome qui sera utilisée pour savoir si une phrase est un palindrome. Cette classe comportera plusieurs méthodes qui indiqueront si une chaîne de caractères (String) donnée en paramètre est un palindrome ou pas :
Classe Palindrome
Pour ceux qui ont déjà fini....
Dans l'exercice sur les entreprises, un employé peut être engagé par plusieurs entreprises. Sans changer le code de la classe Employe, arrangez-vous pour qu'il ne soit pas possible d'ajouter un employé dans plusieurs entreprises. Si un employé est ajouté dans une entreprise, il est automatiquement retiré de son ancienne entreprise (s'il travaille déjà dans une entreprise). Pour cela, conservez dans la classe Entreprise une liste de toutes les entreprises. Au moment d'engager un employé dans une entrerprise, vérifiez qu'aucune entreprise ne l'emploie déjà ; sinon, retirez-le de cette ancienne entreprise.
Un peu de lecture sur les exceptions dans le tutoriel d'Oracle (lisez en particulier cette page : http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html)
Reprenez l'exercice sur les palindromes en utilisant la classe java.text.Collator.