Laboratoire 4 - Cégep de Sherbrooke

publicité
Cégep de Sherbrooke
Laboratoire 4 - La gestion des exceptions
Buts :

Se familiariser avec la gestion des exceptions
Exercice 1.
Créer un projet que vous nommerez GestionException et faire un programme sans objet (seulement
dans le main) qui saisir le nom d’un fichier à l’aide d’un JOptionPane, comme suit :
JOptionPane.showInputDialog("Entrer le nom du fichier : ");
et tenter de l’ouvrir au maximum 3 fois. Si le fichier n’est pas trouvé, afficher un message d’erreur
significatif et redemander son nom. Après 3 essaies, terminer le programme en avertissant
l’utilisateur que son nombre de tentatives est dépassée.
Lorsque vous ouvrez le fichier, vous en faîtes la lecture (celui-ci contient des doubles, créer le en
mettant des nombres avec la virgule et des décimales), vous les additionner et afficher la somme ds
un fichier en sortie qui porte le même nom que celui en entree, mais avec le mot somme devant.
Répondez aux questions suivantes et regarder si vous avez penser à tout dans votre programme pour
faire une bonne gestion d’exeptions:

Que se passe-t-il si vous essayez d’ouvrir un fichier en mode lecture, et le fichier n’existe pas ?

Que se passe-t-il si vous essayez d’ouvrir un fichier en mode écriture, et le fichier n’existe pas ?

Que se passe-t-il si ce n’est pas un nombre qui est entré et qu’il ne peut faire la conversion ?

Que se passe-t-il si une méthode lance une exception qui n’a pas de bloc catch associé ?

Est-il possible d’avoir deux blocs catch pour la même exception ?
Exercice 2.
Créer une nouvelle Classe dans ce projet que vous nommerez Entier. Cette classe ne contiendra pas
de propriété, mais seulement une méthode du nom de intInput qui nous permettra de saisir en
console une string (pour saisir toute une ligne) et celle-ci sera convertie en int ensuite pour s’assurer
que c’était bien un entier. Cette méthode affichera l’étiquette reçu en paramètre (qui pourra varier
selon l’appel) et retournera l’entier saisi et valide. Si ce n’est pas un entier, elle enverra l’exception
approprié (NumberFormatException) qui sera créée et envoyé par la méthode.
Ajouter un main à cette classe pour tester ce nouvel objet
try {
Entier entier = new Entier();
int age = entier.intInput("Entrer votre âge: ");
if(age >= 18)
System.out.println("Vous pouvez entrer dans les bars à " + age + " ans");
}
catch (NumberFormatException e) {
//Si la méthode n’a pu convertir en entier
System.err.println("Veuillez saisir un entier.");
}
Ce serait bien de ne pas être obligé d’instancier l’objet entier, comme avec la String ou les Wrappers,
comme ceci :
int age = Entier.intInput("Entrer votre âge: ");
Pour ce faire, vous devez rendre votre méthode static.
Page 1
Exercice 3.
Vous allez modifier le programme du jeu de dé, pour ajouter la gestion des exceptions et ainsi
s’assurer que nos objets Joueur et De sont protégés des paramètres incohérents. Ces 2 objets
contiennent des méthodes qui reçoivent des paramètres qui peuvent causer des problèmes majeurs
à nos objets, soit
 Pour Joueur, recevoir un score négatif. Les méthodes qui reçoivent un paramètre qui
peut corrompre le score sont : le constructeur qui reçoit un score, le setteur de score
et la méthode ajoute qui reçcoit un nombre de points pour ajouter au score.
 Pour De, recevoir un nombre de faces négatif. Les méthodes qui reçoivent un
paramètre qui peut corrompre le nombre de faces sont : le constructeur qui reçoit un
nombre de faces et le setteur de nombre de faces.
Vous allez donc créer 2 nouveaux objets, ScoreNegativeException et FaceNumberException qui
serviront à vos objets Joueur et De a réagir en cas de mauvais paramètres. Ajouter la Javadoc à
mesure pour les nouveaux objets et pour les méthodes modifiés dans Joueur et De.
Voici l’objet ScoreNegativeException qui hérite de l’objet Exception
public class ScoreNegativeException extends Exception {
public ScoreNegativeException(String message) {
super(message);
}
}
Lors qu’une méthode reçoit un paramètre qui peut causer problème, c’est sa responsabilité de créer
et d’envoyer l’exception, comme ceci
public void setScore(int score) throws ScoreNegativeException {
if(score < 0)
throw new ScoreNegativeException("Le score doit être >= 0");
this.score = score;
}
Et dans le jeu de dé, lors qu’on utilise cette méthode désormais, on doit l’entourer d’un bloc try catch
pour attraper cette exception qui est lancé par l’objet, même si le paramètre envoyé est correct.
try {
…
joueur1.setScore(nbPoints);
} catch (ScoreNegativeException e) {
System.err.println(e.toString());
}
Attention, dans votre objet joueur, le constructeur qui set le score devrait maintenant appeler
setScrore pour réutiliser le code créer dans le setteur et non le réécrire, comme ceci
public Joueur(String nom, int score) throws ScoreNegativeException {
this.nom = nom;
setScrore(score); //si le score est < 0 setScrore lancera
//l’exception qui sera relancé par le constructeur
}
Page 2
Téléchargement