Objet, Référence et redéfinition

Exercice 1 - Plaque d'immatriculation

On veut modéliser des numéros de plaques d'immatriculation en séparant le code du département des autres informations.
Pour tous les exercices suivants même si ce n'est pas explicitement demandé il vous faudra tester à chaque fois le code que vous écrivez en écrivant un main soit dans la classe courante soit dans une autre classe.

  1. Écrire une classe NumberPlate contenant 2 champs stateCode et serial représentant respectivement le code du département (penser aux codes 2A et 2B pour la Corse) et la séquence de chiffres et de lettres qui le précède.
  2. Écrire le constructeur prenant en paramètres les valeurs des champs précédents, ainsi que les méthodes getSerial() et getStateCode().
  3. Écrire la méthode toString().
    A quoi sert l'annotation @Override ? Doit-on l'utiliser dans ce cas ?
  4. Écrire un autre constructeur prenant en paramètres une chaîne de caractères contenant l'immatriculation entière, et qui en extrait le code du département et le numéro de série pour initialiser les champs de l'objet. On supposera que le numéro de département est toujours composé des deux derniers caractères de l'immatriculation entière.
    Pour vous aidez, vous pouvez regarder, dans la documentation, la classe java.lang.String.

Exercice 2 - Référence, comparaison d'objet

Éxecutez le code suivant.

    public static void main(String[] args){
 	 NumberPlate a = new NumberPlate("956 XM 94");
 	 NumberPlate b = new NumberPlate("956 XM 94");
 	 NumberPlate c = a;

 	 System.out.println(a==b);
 	 System.out.println(a==c);

 	 System.out.println(a.equals(b));
 	 System.out.println(a.equals(c));
    }
    
Modifier le code de NumberPlate pour que le comportement de cette classe soit plus naturel.

Puis éxecutez le code suivant.

    public static void main(String[] args){
 	 List<NumberPlate> list = new ArrayList<NumberPlate>();
 	 NumberPlate a = new NumberPlate("956 XM 94");
 	 NumberPlate b = new NumberPlate("956 XM 94");

 	 list.add(a);
     list.add(b);
 	 System.out.println(list.indexOf(a));
 	 System.out.println(list.indexOf(b));
    }
    
Le comportement de la classe NumberPlate correspond t'il a nos attentes ? Pourquoi ?
Utiliser l'annotation @Override pour vérifier.
Modifier la classe en conséquence.

Exercice 3 - Trions gaiement

  1. Écrire un programme Java qui demande à l'utilisateur des mots saisis sur l'entrée standard System.in et qui les affiche sur la sortie standard System.out.
  2. Modifier le programme pour que s'il y a un nom de fichier sur la ligne de commande alors le programme utilise les mots du fichier sinon le programme utilise l'entrée standard.
  3. Si ça n'est pas déjà fait, modifiez votre programme pour que les mots soient affichés une fois qu'ils ont tous été saisis (utilisez java.util.ArrayList).
    Quelle est la différence entre un tableau et la classe java.util.ArrayList.
  4. Le compilateur indique des messages d'alerte (« warning»). Expliquez pourquoi et faites en sorte de le rassurer.
  5. Modifier le programme pour qu'il affiche les mots saisis par ordre lexicographique.