TP sur les exceptions - première approche des collections - chaînes de caractères
Page Home (contact) Retour
TPs
Support de cours
Exceptions dans les étagères
Reprenez vos classes Livre et Etagere du paquetage bibliotheque
(tp sur le paquetage bibliotheque).
- Dans la méthode de Etagere qui ajoute un livre sur l'étagère,
enlevez le test qui vérifie que l'étagère n'est pas
pleine. Pour la suite, appelons cette méthode "ajouter". Dans
la méthode main, provoquez la levée d'exception
en ajoutant un livre dans une étagère pleine. Notez les noms
des exceptions levées.
- Mettez dans des blocs "try ... catch" les appels à
la méthode ajouter. Les messages d'erreurs seront affichés
par ces blocs dans la méthode utilisatrice des étagères.
Dans votre message d'erreur, faites afficher la pile des appels de méthodes
qui a conduit à l'erreur (méthode printStackTrace).
- Ecrivez votre propre classe d'exception EtagerePleineException
pour ce type d'exception. La méthode ajouter devra utiliser
cette nouvelle exception. Un attribut privé de cette classe sera une
référence vers l'étagère qui a provoqué
le problème. 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", ou plus généralement, récupérer
des informations sur l'étagère où il y a eu un problème
(par exemple, afficher la liste des livres qu'elle contient déjà).
- 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 l'exception par la méthode
ajouter qui ne peut prendre la bonne décision. Pour illustrer
cela, écrivez une classe Librairie qui possède une
méthode ajouterLivre qui ajoute des livres dans des étagères.
Si une étagère est pleine alors que l'on veut ajouter un livre,
on n'affiche pas de message d'erreur mais on crée une nouvelle étagère
dans laquelle on range le livre. Vous créerez des étagères
qui peuvent contenir 3 livres et vous rangerez les étagères
dans un ArrayList<Etagere>.
Pour créer une instance d'une telle liste : listeEtageres
= new ArrayList<Etagere>(); pour ajouter une étagère
dans une telle liste : listeEtageres.add(etagere);
Ajoutez à la classe Librairie
une méthode qui affiche
tous les livres qui ont été ajoutés.
Correction :
Classe Librairie
Classe Etagere
Classe EtagerePleineException
Une entreprise, collection d'employés
- Ecrivez une classe Entreprise. Une entreprise a
un nom et a des employés que vous enregistrerez à l'aide
d'un
ArrayList<Employe>.
Utilisez cette classe Employe. Il devra être possible d'ajouter et d'enlever des employés
dans une entreprise. Utilisez une classe d'exception pour les cas où, par
exemple, on veut enlever un employé dans une entreprise dans lequel il ne
travaille pas.
L'association entre une entreprise et ses employés sera bidirectionnelle
: une entreprise connaît ses employés et un employé connaît son entreprise
; attention de bien gérer les 2 "bouts" de l'association.
Par exemple, si vous ajoutez un employé dans une entreprise e, l'employé
doit être ajouté à la liste des employés de l'entreprise mais l'entreprise
de l'employé doit aussi être mise à la valeur e.
Vous pouvez, si vous le voulez utiliser les classes d'employés
sur lesquelles vous avez déjà travaillé dans les TPs
précédents, ou récrire une nouvelle classe Employe.
On n'utilisera pas les salaires pour cet exercice.
- Vous écrirez une méthode toString qui décrit
une entreprise en affichant son nom et les noms de tous ses employés
(parcourez l'ArrayList et utilisez un StringBuilder pour ajouter une description de chaque employé).
- Pour tester, ajoutez quelques employés dans 2 entreprises et faites
afficher les noms des entreprises et de leurs employés.
Correction :
Classe Entreprise
Classe TestEntreprise
Classe EmployeException
Palindromes (chaînes de caractères)
Élu par cette crapule.
Ésope reste ici et se repose.
Tu l'as trop écrasé, César, ce Port-Salut...
Ca vous dit quelque chose ? Ce sont des palindromes.
É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 :
- La méthode "boolean palindrome1(String)" prend en paramètre
une chaîne constituée uniquement de lettres minuscules ou majuscules
(pas d'espaces ni de lettres accentuées). Elle renvoie vrai si le paramètre
est un palindrome. On tient compte de la casse des lettres (abBA n'est pas
un palindrome). Vous comparerez les lettres une à une.
- La deuxième version de la méthode palindrome1, nommée palindrome2 utilise la méthode reverse() de la classe StringBuilder ou StringBuffer.
- La méthode palindrome3 généralise palindrome1: le paramètre peut comporter autre chose que des lettres (des signes
de ponctuation par exemple) mais on n'en tient pas compte.
- La méthode palindrome4 généralise palindrome3 : un deuxième paramètre indique si on tient compte de la casse
des lettres. Ce deuxième paramètre devra être optionnel.
Par défaut, les majuscules et minuscules ne seront pas considérées
comme équivalentes.
- Généralisez palindrome4 en palindrome5 : en plus, les lettres accentuées sont considérées équivalentes
aux lettres non accentuées ; par exemple, e, ê, è et é
sont équivalentes. Comme palindrome4, palindrome5 a un paramètre optionnel pour ignorer la casse des lettres. Dans le
cas où elle est ignorée, E, È, Ê et É sont
équivalentes à e, è, ê et é.
Correction
Classe Palindrome
Pour ceux qui ont déjà fini....
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)
Classe Collator pour comparer des chaînes de caractères "localisées"
Reprenez l'exercice sur les palindromes en utilisant la classe java.text.Collator.
Retour TPs