:: Enseignements :: ESIPE :: E4INFO :: 2009-2010 :: Java Avancé ::
[LOGO]

Examen de Java sur machine (2h)


Les sources sont à placer à la fin des deux heures dans le répertoire nommé par votre login sur /home/shares/igm/pub/JavaIR2

Exercice 1 - Puzzlers (4)

Le but est de modifier les codes proposés en fonction de ce qui est demandé. Attention, si l'on vous demande de modifier une ligne particulière, cela veut dire qu'il faut modifier cette ligne (par l'expression) précisément et uniquement cette ligne.
Chaque question compte pour 1 point.


  1. Modifier la ligne indiquée pour que le programmae appelle la méthode m qui affiche A.

  2. Déclarer la variable locale list à l'endroit indiqué.

  3. Modifier le code pour qu'il compile sachant qu'il faut modifier uniquement la ligne indiquée.

  4. Modifier le code pour qu'il compile sachant qu'il faut insérer du code à la ligne indiquée.

Exercice 2 - Liste récursive (16)

Le but de cet exercice est d'implanter une liste récursive immutable nommée RecList, comme celle en C, c-a-d que le maillon de la liste et la liste elle même sont codés par une seule et même classe.
Dans un premier temps, on ne vous demande pas que RecList implante l'interface java.util.List.
Note de design:
  • On vous demande qu'il ne soit pas possible de créer des élements de la liste en appelant directement un ou des constructeurs.
  • La liste récursive ne doit jamais stocker la valeur null et donc lever l'exception qui s'impose si l'utilisateur demande d'insérer null.
  • La liste doit être paramétrée par le type d'élement que l'on peut mettre dedans.
  • Attention à bien mettre les bon modificateurs partout !

  1. Ecrire une méthode of prenant en paramètre un élement et permettant de créer un maillon ainsi qu'une méthode getElement qui renvoie l'element contenu dans un maillon.
  2. Ecrire une méthode prepend qui prend en paramètre un élement, est appelée sur une liste récursive, renvoie une nouvelle liste. La nouvelle liste sera constituée de l'élement pris en paramètre suivi de l'ensemble des élements de la liste sur laquelle la méthode est appelée.
  3. Ecrire une méthode (celle habituelle) permettant d'afficher l'ensemble des élements d'une liste entre crochets ('[' et ']') séparé par une virgule (',') suivi d'un espace. Le dernier élement ne doit pas être suivi d'une virgule (ni de l'espace).
  4. Ecrire une méthode prependAndReverseAll qui prend une java.util.List en paramètre, est appelée sur une liste récursive, renvoie une liste récursive. La liste renvoyée contiendra l'ensemble des élements de la liste prise en paramètre dans l'ordre inverse, suivi de l'ensemble des élements de la liste récursive sur laquelle la méthode a été appelée (ces élements sont eux dans le même ordre que la liste récursive initial).
                     prependAndReverseAll 
          [1, 2 ]         [3, 4]            =    [4, 3, 1, 2]                
          
  5. On souhaite maintenant que la classe RecList implante l'interface java.util.List. On vous rappelle que la liste récursive est non mutable, que les classes java.util.AbstractList et java.util.AbstractSequentialList existent, et que le parcours de l'iterateur doit être en O(n).
  6. Ecrire une méthode appendAll permettant d'ajouter à la fin de la liste récursive sur laquelle la méthode est appelée les élements d'une java.util.List (qui seront ajouté dans le même ordre que celui dans lequel ils sont dans la java.util.List).
  7. Ecrire une méthode appendAll spécifique dans le cas où la liste passée en paramètre est une liste récursive.
  8. Redéfinir equals pour accelérer les cas où l'on compare deux listes récursive.
Pour tester votre code, une classe de test vous est fourni (le code des tests n'est pas très lisible), ces tests ne remplacent pas les tests que vous pouvez faire mais vous donne une indication de votre progression.
Il vous faut enlever les commentaires des tests au fur et à mesure de votre progression.