:: Enseignements :: ESIPE :: E3INFO :: 2009-2010 :: Programmation Objet avec Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
Ensemble, Enumération, Iterateur, Iterable et Collections.
|
Ce TD ne sera pas fait pendant les scéances mais fourni un bon complément
aux précédents TDs.
Exercice 1 - Ensemble et Bag
-
Ecrire un programme indiquant quels sont les mots qui se trouvent
sur la ligne de commande, on affichera les doublons une unique fois.
java Unique toto tutu toto titi tutu
-
Dans un premiers temps, afficher "toto", "titi" et "tutu" dans n'importe quel ordre.
-
Ensuite, afficher "toto", "tutu" "titi" dans cet ordre, c-a-d l'ordre d'insertion.
-
Enfin, afficher "titi", "toto", "tutu" dans cet ordre, c-a-d l'ordre lexicographique.
-
Ecrire un second programme pour qu'il compte
le nombre de fois qu'un mot apparait sur sa ligne de commande
et affiche chaque mot suivi de son nombre d'occurence.
N.B : penser à faire des fonctions assez générales et si possible utilisables avec
autre chose que des String.
Exercice 2 - Jeux de cartes
On souhaite modéliser un jeux de 32 cartes (8 * 4 couleurs).
Les 8 rangs sont SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE
et les quatres suites CLUBS, DIAMONDS, HEARTS, SPADES.
-
Ecrire une classe Card prenant en paramètre
un rang et une suite. Utiliser les énumérations pour modéliser
les rangs et les suites.
-
Ecrire la méthode toString() affichant la carte
new Card(Rank.ACE,Suit.SPADES)
comme ceci ACE of SPADES.
Note: les valeurs d'une énumération possèdent une méthode name().
-
Créer une méthode List<Card> newDeck() qui renvoie un jeu
de 32 cartes.
Note : La classe d'une énumération possède une méthode statique values()
qui renvoie un tableau contenant les valeurs de l'énumération.
-
Comment interdire que plusieurs cartes d'une même type existe ?
-
En supposant que l'ordre de trie des cartes est d'abord en fonction de leur suite
puis de leur rang.
Que doit-on faire pour que le code suivant trie les cartes ?
List<Card> deck=newDeck();
Collections.shuffle(deck);
System.out.println(deck);
Collections.sort(deck);
System.out.println(deck);
Note: les valeurs d'une énumération possède une méthode ordinal()
ou mieux les valeurs de l'énumération sont Comparable.
Exercice 3 - Jeux de cartes (suite :)
Pour tester vos différentes méthodes,
utilisez la classe Card de l'exercise précédent.
-
Ecrire une méthode reverseIterator() dans une classe Utils
qui prend en paramètre une liste de carte et qui renvoie un
iterateur (Iterator) qui permet de parcourir la liste en ordre inverse.
Dans un premier temps, utiliser une List<Card>
Pour cela, vous devrez créer une classe ReverseIterator
implantant l'interface Iterator.
-
Modifier la méthode reverseIterator pour implanter l'iterateur
sous forme de classe anonyme.
-
Ecrire une méthode shuffleIterator qui renvoie un iterateur
parcourant de façon mélangée une liste passée en argument.
Pour ne pas changer la liste initiale, on créra un tableau d'entier contenant
les valeurs de 0 à la taille de la liste-1
sur lequel on appliquera le shuffle (pensez aux vues). On se servira
de ce tableau comme d'index des éléments à parcourir lors de l'itération.
-
A quoi sert l'interface java.lang.Iterable
Ecrire une méthode shuffleIterable prenant une liste en
paramêtre et qui renvoie un Iterable permettant
d'obtenir des iterateurs parcourant la liste de façon mélangée.
-
Enfin, écrire une méthode shuffleList prenant une liste en
paramètre et qui renvoie une List
mélangée qui est une vue de la liste initiale.
On considerera que la liste initiale ne peux pas changée de taille.
© Université de Marne-la-Vallée