:: Enseignements :: ESIPE :: E4INFO :: 2009-2010 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | 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.
-
Modifier la ligne indiquée pour que le programmae appelle la méthode m
qui affiche A.
-
Déclarer la variable locale list à l'endroit indiqué.
-
Modifier le code pour qu'il compile sachant qu'il faut modifier uniquement
la ligne indiquée.
-
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 !
-
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.
-
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.
-
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).
-
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]
-
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).
-
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).
-
Ecrire une méthode appendAll spécifique dans le cas où la liste
passée en paramètre est une liste récursive.
-
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.
© Université de Marne-la-Vallée