IX-A. Exercice 1 : nouveau constructeur pour la classe Poisson▲
Cet exercice ne présente pas de difficulté particulière.
Bien sûr, nous travaillerons avec les nouvelles versions des classes Poisson et MaitrePoisson : les classes obtenues dans ce chapitre (j'y ai remplacé tous les accents).
publicclass Poisson extends AnimalFamilier {int profondeurCourante =0;
finalint PROFONDEUR_PLONGEE =5;
publicPoisson(){
profondeurCourante =10;
}publicintplonger() {
profondeurCourante = profondeurCourante +
PROFONDEUR_PLONGEE;
if(profondeurCourante >100) {
System.out.println("Je suis un petit"+" poisson et je ne peux pas plonger"+" plus profond que 100 metres");
profondeurCourante = profondeurCourante
- PROFONDEUR_PLONGEE;
}else{
System.out.println("Plongee de "+ PROFONDEUR_PLONGEE
+" metres");
System.out.println("Je suis a "+ profondeurCourante
+" metres sous le niveau de la mer");
}return profondeurCourante;
}publicintplonger(int combienDePlus) {
profondeurCourante = profondeurCourante + combienDePlus;
if(profondeurCourante >100) {
System.out.println("Je suis un petit"+" poisson et je ne peux pas plonger"+" plus profond que 100 metres");
profondeurCourante = profondeurCourante
- combienDePlus;
}else{
System.out.println("Plongee de "+ combienDePlus
+" metres");
System.out.println("Je suis a "+ profondeurCourante
+" metres sous le niveau de la mer");
}return profondeurCourante;
}public String dire(String unMot){return"Ne sais-tu pas que les poissons ne"+" parlent pas ?";
}// ConstructeurPoisson(int positionDepart) {
profondeurCourante = positionDepart;
}}
Voici la nouvelle version de la classe MaitrePoisson :
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
publicclass MaitrePoisson {publicstaticvoidmain(String[] args) {
Poisson monPoisson =newPoisson();
String chaineNombreDeMetres ="";
int entierNombreDeMetres;
// Cree un lecteur de flux d'entree connecte a// System.in et le passe au lecteur a tampon
BufferedReader entreeStandard =new BufferedReader
(newInputStreamReader(System.in));
// Continue a plonger tant que l'utilisateur// ne tape pas "Q"while(true) {
System.out.println("Pret a plonger. De combien ?");
try{
chaineNombreDeMetres = entreeStandard.readLine();
if(chaineNombreDeMetres.equals("Q")) {// Sort du programme
System.out.println("Au revoir !");
System.exit(0);
}else{// Convertit chaineNombreDeMetres en entier// et plonge de la valeur de entierNombreDeMetres
entierNombreDeMetres =
Integer.parseInt(chaineNombreDeMetres);
monPoisson.plonger(entierNombreDeMetres);
}}catch(IOException e) {
e.printStackTrace();
}}}}
Pret a plonger. De combien ?
10
Plongee de 10 metres
Je suis a 20 metres sous le niveau de la mer
Pret a plonger. De combien ?
3
Plongee de 3 metres
Je suis a 23 metres sous le niveau de la mer
Pret a plonger. De combien ?
Q
Au revoir !
IX-B. Exercice 2 : nouveau constructeur pour la classe Score▲
Cet exercice ne présente pas non plus de difficulté particulière.
Sachez tout de même que vous pouvez, sous Eclipse, lancer le menu Source->Generate Constructor using fields. Ce menu vous permet de générer un constructeur, mais vous pouvez choisir quels champs de votre classe seront initialisés :
import java.util.Date;
import java.text.SimpleDateFormat;
publicclass Score {private String prenom;
private String nom;
privateint score;
private Date dateDernierePartie;
publicScore(String prenom, String nom, int score, Date dateDernierePartie) {this.prenom = prenom;
this.nom = nom;
this.score = score;
this.dateDernierePartie = dateDernierePartie;
}public String lirePrenom() {return prenom;
}publicvoidaffecterPrenom(String prenom) {this.prenom = prenom;
}public String lireNom() {return nom;
}publicvoidaffecterNom(String nom) {this.nom = nom;
}publicintlireScore() {return score;
}publicvoidaffecterScore(int score) {this.score = score;
}public Date lireDateDernierePartie() {return dateDernierePartie;
}publicvoidaffecterDateDernierePartie(Date
dateDernierePartie) {this.dateDernierePartie = dateDernierePartie;
}// Concatene tous les attributs en une chaîne// et y ajoute un caractere fin de ligne.// Cette methode est pratique, par exemple pour// afficher toutes les valeurs d'un coup, comme ceci :// System.out.println(myScore.toString());// NDT : comme cette methode surcharge Object.toString(),// tu es certain que la bonne representation de Score// est utilisee partout où Java en a besoin (c'est pour// cela que nous ne l'avons pas appelee convertirEnString).public String toString() {
String chaîneScore = prenom +" "+
nom +" "+ score +" "+ SimpleDateFormat.
getDateInstance().format(dateDernierePartie) +
System.getProperty("line.separator");
return chaîneScore;
}}
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
publicclass EnregistreurScores3 {/**La methode main execute les actions suivantes :1. Cree une instance de tableau2. Cree les objets Score et les stocke dans le tableau3. Ecrit les donnees de scores dans un fichier */publicstaticvoidmain(String[] args) {
FileWriter monFichier =null;
BufferedWriter tampon =null;
Date ceJour =newDate();
Score scores[] =new Score[3];
// Joueur n°1
scores[0]=newScore("Jean", "Dupont", 250, ceJour);
// Joueur n°2
scores[1]=newScore("Anne", "Durand", 300, ceJour);
// Joueur n°3
scores[2]=newScore("Eskil", "Pemieufer", 190, ceJour);
try{
monFichier =newFileWriter("c:\\scores2.txt");
tampon =newBufferedWriter(monFichier);
for(int i =0; i < scores.length; i++) {// Convertit chaque Score en String// et l'ecrit dans scores2.txt
tampon.write(scores[i].toString());
System.out.println("Ecriture des donnees de "+
scores[i].lireNom());
}
System.out.println("Ecriture du fichier terminee");
}catch(IOException e) {
e.printStackTrace();
}finally{try{
tampon.flush();
tampon.close();
monFichier.close();
}catch(IOException e1) {
e1.printStackTrace();
}}}}
Enfin je souhaite attirer votre attention sur l'utilisation du mot-clé this dans le constructeur : il permet ici de distinguer les paramètres des variables de classe. Ceci parce que paramètres et variables de classes ont les mêmes noms.
IX-C. Exercice pour les petits malins : DemoVector.java▲
La classe java.util.Vector nous permet ici de réaliser exactement la même chose que dans le code original, presque sans aucune modification. En effet les deux classes disposent des méthodes add(Object), size() et get(int) et ces méthodes ont le même comportement. Quand je parle de la méthode get(int) : je parle tout simplement de la version de la méthode get() acceptant un paramètre de type int.