25/04/06

JAVA  TP n° 12 : Fichiers, exceptions, tableaux, dates, collections…

 

Contexte : Jeu de LOTO

Le jeu du loto consiste à choisir 6 numéros compris entre 1 et 49. Un tirage aléatoire est effectué plusieurs fois dans l’année. Si au moins 3 numéros choisis correspondent à ceux tirés, vous avez gagné !

 

Première partie : Classe « Tirage » - Générer une exception

 

1) Créer une classe « Tirage » munie des attributs et méthodes suivants :

-   Attributs privés :

§           Numero : entier  C’est le numéro du tirage sous la forme AAAANNNI où AAAA représente l’année, NNN le numéro du jour du tirage dans l’année et I le numéro du tirage du jour.

§           Jour : caractère. C’est égal à M (Mercredi) ou S (Samedi)

§           Date : calendrier. C’est la date du tirage

§           Boules : tableau d’entiers. Contient les 6 boules tirées

§           Complementaire : entier. Contient la boule complémentaire

-   Constructeurs publics :

§           Tirage (int numero, caractere jour, GregorianCalendar date, int boule1, int boule2, int boule3, int boule4, int boule5, int boule6, int complementaire)

§           Tirage(int numero, char jour, GregorianCalendar date, int[ ] boules)

-   Méthodes publiques :

§           public String toString()

§           public GregorianCalendar getDate ()  // Retourne la date du tirage

§           public boolean contient(int boule)  // Indique si un numéro fait partie du tirage

 

2) Créer une classe “JeuLoto” munie d’une méthode main qui crée un tirage et l’affiche en utilisant la méthode “toString” de la classe Tirage.

 

Exemple de résultat à obtenir :

Tirage:20050121 du samedi 12 décembre 2005

boule 1: 43

boule 2: 44

boule 3: 21

boule 4: 6

boule 5: 3

boule 6: 48

 

3) Dans le constructeur de Tirage, vérifiez que le jour transmis est égal à ‘M’ ou ‘S’. Si ce n’est pas le cas, générez une exception de type « IllegalArgumentException ».

Cette exception devra être interceptée dans la méthode « main » (utilisez Try et Catch) et affichera un message d’erreur.

 

Exemple de résultat à obtenir :

Le code du jour doit être égal à M (pour mercredi) ou S (pour samedi) !

 

4) Ajoutez une méthode privée « controleBoule » dans la classe « Tirage » afin de vérifier que les numéros transmis sont compris entre 1 et 49.

Si ce n’est pas le cas, générez une exception de type IllegalArgumentException et propagez cette exception vers la méthode « main » qui affichera un message d’erreur :

 

Signature de controleBoule : private void controleBoule(int boule)

 

Exemple de résultat à obtenir :

Une boule doit être comprise entre 1 et 49 !

 

 


Seconde partie : Fichier « loto2005.csv » - Lecture de fichier et exceptions

 

Remarque : Dans la première partie, nous avons créé un tirage fictif. Nous allons maintenant travailler sur les tirages réels qui ont eu lieu au cours de l’année 2005. Ces tirages seront contenus dans un fichier texte au format CSV.

 

1) Dans une méthode « main » qui reçoit en paramètre (ligne de commande) le nom du fichier :

-          vérifiez qu’un paramètre est bien fourni, sinon affichez un message d’erreur

-          générez une exception de type « FileNotFoundException » si le fichier n’est pas trouvé

-          générez une exception de type « IOException » si le fichier est trouvé mais n’est pas lisible

 

2) Téléchargez le fichier des tirages de 2005 à cette adresse : http://pchochois.free.fr/data/loto2005.csv

 

3) Ecrivez une boucle qui parcourt votre fichier (Vous pouvez tester le fonctionnement en affichant le contenu de chaque ligne).
Attention, le première ligne indique le libellé des informations et n’est donc pas significative.

 

4) Chaque ligne du fichier contient un tirage du loto. Par ailleurs, nous disposons d’une classe « Tirage ».

Vous devez développer une classe technique appelée « Parser » qui permet de transformer une ligne du fichier en une instance de classe « Tirage ».

La classe « Parser » contiendra 2 méthodes statiques :

- public static Tirage parserTirage(String ligne)      //     Transforme une chaîne de caractères en Tirage

- public static GregorianCalendar parserDate(String date)            //  Transforme une chaîne de caractères en date

 

Conseils :

-          La méthode parserTirage appelle la méthode parserDate.

-          Pour transformer une chaîne en entier, utilisez la méthode parseInt de la classe Integer

-          Utilisez la classe GregorianCalendar pour gérer les dates

 

5) Le travail consiste maintenant à afficher les tirages sortis à une date saisie par l’utilisateur.

Modifiez votre application afin :

-          de demander à l’utilisateur de saisir une date (utilisez la méthode parserDate pour transformer le texte saisi en Date).

-          De comparer la date saisie aux dates de tirages. Pour cela, vous devez créer une instance de « Tirage » grâce au « parser » et utiliser la méthode « existe » de la classe « Tirage »  (Signature : public boolean existe(GregorianCalendar date) ). Cette méthode est à développer.

-          D’afficher seulement les tirages sortis à la date donnée.

 

Exemple de résultat à obtenir :

Saisissez une date au format AAAAMMJJ !

20050713

Tirage:20050562 du mercredi 13 juillet 2005

boule 1: 22

boule 2: 29

boule 3: 30

boule 4: 49

boule 5: 20

boule 6: 35

complémentaire: 41

 

Tirage:20050561 du mercredi 13 juillet 2005

boule 1: 40

boule 2: 44

boule 3: 49

boule 4: 7

boule 5: 32

boule 6: 2

complémentaire: 39

 

6) Que se passe t-il si la date saisie par l’utilisateur n’est pas conforme à notre attente ?   Le programme se plante !

Pour gérer les mauvaises saisies des utilisateurs, propagez les exceptions « NumberFormatException » et  « IndexOutOfBoundsException » dans les méthodes de la classe « Parser » jusqu’à votre programme principal pour afficher des messages d’erreur.

 

Exemple de résultat à obtenir :

Saisissez une date au format AAAAMMJJ !

Y1989TTTTtr19

La date saisie est incorrecte !

recherche impossible !


 

Troisième partie : Jeu

 

L’objectif est de simuler le jeu du loto.

-          L’utilisateur saisit 6 nombres compris entre 1 et 49

-          Le système génère 6 nombres aléatoires compris entre 1 et 49. Pour cela, il faut définir constructeur supplémentaire dans la classe « Tirage ». Ce constructeur n’attend aucun paramètre et renseigne les numéros de façon aléatoire.
Conseil : Utilisez la méthode statique « shuffle » de la classe « Collection » pour mélanger vos numéros et récupérez les 6 premiers

-          Le système compare la saisie par rapport au tirage et affiche le nombre de numéros trouvés

 

 

Exemple de résultat à obtenir :

Saisissez 6 nombres entre 1 et 49...

Nombre 1:25

Nombre 2:12

Nombre 3:7

Nombre 4:45

Nombre 5:18

Nombre 6:33

 

Le tirage était le suivant:

Tirage:0 du samedi 24 avril 2006

boule 1: 14

boule 2: 44

boule 3: 43

boule 4: 21

boule 5: 23

boule 6: 45

complémentaire: 10

 

Vous avez 1 bon numéro