25/04/06
JAVA TP n° 12 : Fichiers, exceptions, tableaux, dates, collections…
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é !
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 !
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 !
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