:: Enseignements :: Master :: M1 :: 2008-2009 :: Stage Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
Premiers pas en Java, variables, tests, boucles, fonctions,
ligne de commande, entrée standard
|
Exercice 1 - Trions gaiment
On souhaite implanter un algorithme ressemblant au trie
à bulle.
-
Écrire une méthode swap qui échange
les valeurs de deux cases d'un tableau.
void swap(int[] array,int index1,int index2)
-
Écrire une méthode indexOfMin qui
renvoie l'index de la valeur minimal d'un tableau.
-
Modifier la méthode indexOfMin en ajoutant
deux index indiquant que l'on cherche l'index du minimum non pas
sur tout le tableau mais sur la partie de tableau entre
les deux index (le premier compris, le deuxième non compris).
-
Écrire la méthode sort qui prend un tableau d'entier
en paramètre et qui trie celui-ci en utilisant pour cela
les méthodes indexOfMin et swap.
-
Modifier la méthode sort pour prendre un nombre
variable d'arguments.
Exercice 2 - La classe Voiture
On souhaite représenter des voitures et réutiliser
la classe
NumberPlate écrite précédemment.
Les informations qui nous intéressent sont le numéro
d'immatriculation, la marque du véhicule, le nombre de
fenêtres de celui-ci, qui nous servira à calculer le montant
d'une taxe, et le niveau d'essence (contenu courant du
réservoir, en litres).
-
Écrire une classe
Car
contenant un champ
numberPlate
de type
NumberPlate
, un champ
fuelTank
de type primitif double, ainsi que des champs
brand
et
numberOfWindows
respectivement de type
String
et
int
ainsi qu'un constructeur acceptant tout ces
paramètres.
-
Écrire les méthodes « getters » de la classe puis
une méthode
toString()
affichant les caractéristiques de la voiture : la
marque, l'immatriculation et le niveau d'essence.
-
Écrire la méthode
getTax()
qui calcule le montant de la taxe selon la formule
1000*numberOfWindows
.
-
Déclarez dans la classe une constante,
LITERS_FOR_ONE_HUNDRED_KILOMETERS
dont vous choisirez la valeur, et qui représente la
consommation de toutes les voitures en litres pour
100 km.
-
Écrire une méthode
drive
qui prend en paramètres le nombre de kilomètres que
doit rouler la voiture et qui consomme la quantité
d'essence correspondant. Que faire si la quantité
d'essence est insuffisante ?
Exercice 3 - La classe Parking
Avant propos, à partir de maintenant il vous est demandé
d'utiliser eclipse et d'écrire votre code
directement dans cet environnement.
On veut maintenant écrire une classe
Parking
qui sert à stocker des voitures. Les voitures seront
stationnées sur des places numérotées en partant de 0. Le
nombre de places est fixé une fois pour toutes à la
construction du parking.
Dans les questions suivantes une méthode qui prend en
paramètre un indice de place de parking qui n'existe pas
devra lever une exception de type
java.lang.IndexOutOfBoundsException
.
-
Écrire le constructeur de la classe
Parking
.
-
Écrire une méthode
park
qui prend en paramètres une voiture, un numéro de place,
qui gare la voiture à la place donnée si elle est libre,
lève une exception de type
java.lang.IllegalStateException
si la place est occupée.
-
Écrire une méthode
unpark
qui prend en paramètre un numéro de place et qui retire
du parking la voiture à cette place. La méthode retourne
l'objet Car récupéré. Elle lève une exception de
type
java.lang.IllegalStateException
si la place est vide.
-
Écrire une méthode
toString
affichant l'état du parking : pour chaque place, le
numéro, ainsi que les caractéristiques de la voiture qui
l'occupe si elle existe.
Vous pouvez regarder la documentation de la classe
java.lang.StringBuilder
.
Exercice 4 - Pile efface
Toutes les classes écrites lors de cette exercice doivent se
trouver dans le paquetage
fr.umlv.util.stack
.
-
Écrire la classe
fr.umlv.util.stack.FixedStack
possèdant les méthodes :
-
boolean isEmpty()
qui indique si la pile est vide.
-
push(Object o)
qui empile une valeur
-
Object pop()
qui dépile une valeur
On considera la pile comme possèdant une capacité
maximale fixée lors de la création de l'objet
FixedStack.
Rappeler ce qu'est une fuite de mémoire (
memory leak
) dans le cas général puis en Java.
Vérifier que votre implantation de
pop
ne crée pas de fuite de mémoire.
-
Modifier votre implantation pour que la taille de
pile grandisse toute seule d'un facteur 2 quand il n'y
a plus assez de place et ce sans utiliser d'ArrayList.
Regarder la méthode java.util.Arrays.copyOf.
Exercice 5 - La classe Parking mais mieux
-
On souhaite obliger le programmeur qui utilise la classe
Parking
à récupérer les exceptions.
Que doit-on faire ?
Fabriquer trois classes
NoCarAtThatPlaceException
,
AlreadyACarAtThatPlaceException
et
OutOfParkingException
.
-
En lisant la documentation que la classe
java.lang.Exception
, on remarque que celle-ci possède 4 constructeurs.
Dans les classes que vous venez de concevoir, quels
constructeurs vous proposez-vous d'implémenter ?
Ré-écrire la classe
Parking
pour qu'elle lève les bonnes exceptions.
-
Faire hériter vos exceptions de RuntimeException,
qu'est ce que cela change ?
Pour chaque exception, indiquer si elle doit ou non
hériter de RuntimeException.
© Université de Marne-la-Vallée