:: Enseignements :: Master :: M1 :: 2008-2009 :: Stage Java ::
[LOGO]

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.

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).
  1. É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.
  2. É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.
  3. Écrire la méthode getTax() qui calcule le montant de la taxe selon la formule 1000*numberOfWindows .
  4. 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.
  5. É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 .

  1. Écrire le constructeur de la classe Parking .
  2. É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.
  3. É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.
  4. É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 .

  1. É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.
  2. 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

  1. 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 .
  2. 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.
  3. 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.