:: Enseignements :: Licence :: L3 :: 2010-2011 :: Programmation Objet avec Java ::
[LOGO]

12. Ensemble, énumération, itérateur, Iterable et Collections.


Ce TD ne sera pas fait pendant les séances mais fournit un bon complément aux précédents.

Exercice 1 - Jeux de cartes

On souhaite modéliser un jeu de 32 cartes (8 * 4 couleurs). Les 8 rangs sont SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE et les quatre couleurs CLUBS, DIAMONDS, HEARTS, SPADES.

  1. Ecrire une classe Card prenant en paramètre un rang et une couleur. Utiliser les énumérations pour modéliser les rangs et les couleurs.
  2. 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().
  3. 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.
  4. Comment interdire que plusieurs cartes d'un même type existent ?
  5. On suppose que l'ordre de tri des cartes est d'abord en fonction de leur couleur 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èdent une méthode ordinal() ou mieux les valeurs de l'énumération sont Comparable.

Exercice 2 - Jeux de cartes (suite :)

Pour tester vos différentes méthodes, utilisez la classe Card de l'exercice précédent.

  1. Ecrire une méthode reverseIterator() dans une classe Utils qui prend en paramètre une liste de cartes et qui renvoie un itérateur (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.
  2. Modifier la méthode reverseIterator pour implanter l'itérateur sous forme de classe anonyme.
  3. Ecrire une méthode shuffleIterator qui renvoie un itérateur parcourant de façon mélangée une liste passée en argument.
    Pour ne pas changer la liste initiale, on créera un tableau d'entiers 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.
  4. A quoi sert l'interface java.lang.Iterable ?
    Ecrire une méthode shuffleIterable qui prend une liste en paramètre et qui renvoie un Iterable permettant d'obtenir des itérateurs parcourant la liste de façon mélangée.
  5. Enfin, écrire une méthode shuffleList qui prend une liste en paramètre et qui renvoie une List mélangée qui est une vue de la liste initiale.
    On considèrera que la liste initiale ne peut pas changer de taille.