TP 2 de Programmation, 2e Année Informatique 2006-2007
Exercice 1
Pour chacune des questions suivantes, rédigez un petit paragraphe expliquant ce qui se produit.
Question 1.1
Consulter la documentation de la méthode parseInt
de la classe Integer. Quelle exception peut-elle renvoyer ?
Question 1.2
écrire un petit programme java qui prendra comme
arguments (c'est à dire dans l'argument args de
main) une série d'entiers, et affichera leur somme. On
considère que si l'utilisateur entre un argument qui n'est pas un
entier, le programme s'arrête sur l'exception :
$ java MonProg 15 7 a 3
Exception in thread "main" java.lang.NumberFormatException: a
at java.lang.Integer.parseInt(Integer.java, Compiled Code)
at java.lang.Integer.parseInt(Integer.java, Compiled Code)
at MonProg.main(MonProg.java:7)
Question 1.3
même chose, mais on veut un message d'erreur :
$ java MonProg 15 7 a 3
erreur : entrez uniquement des entiers
Question 1.4
même chose, mais cette fois-ci, en cas d'erreur, on veut
afficher la somme partielle jusqu'à l'erreur :
$ java MonProg 15 7 a 3
22
Question 1.5
même chose, mais on ignore les arguments erronés :
$ java MonProg 15 7 a 3
25
Exercice 2
Pour lire une ligne de texte sur l'entrée standard, il faut :
On désire écrire une classe nommée MaConsole, pour disposer
d'entrées/sorties simples.
La classe dispose au départ des méthodes :
public void ecrire(String s) {
System.out.println(s);
}
public void ecrire(int i) {
System.out.println(i);
}
Question 2.1 lecture de ligne
écrire la méthode :
- public String lireLigne (String question)
-
affiche question puis
lit une ligne sur l'entrée/sortie standard. exemple :
MaConsole c= new MaConsole();
...
s= c.lireLigne("Bonjour quel est votre nom ?");
Cette méthode ne doit pas renvoyer d'exception. En cas de problème
(fin de fichier ou autre), elle renvoie null.
Question 2.2 lecture d'entier
écrire la méthode :
- public int lireEntier (String question)
-
affiche question, puis
lit un entier sur l'entrée/sortie standard. Si la ligne de texte
tapée ne correspond pas à un entier, repose la question jusqu'à ce
que la réponse soit bonne.
Dans le cas où une fin de fichier est rencontrée, lireEntier doit
renvoyer 0.
Question 2.3 lecture d'entier avec erreur possible
écrire la méthode
- public int lireCommeEntier (String question)
-
affiche question, puis lit la ligne entrée par
l'utilisateur, et essaye de l'interpréter comme un entier. Si ce
n'est pas le cas, une exception est propagée.
Attention !! du fait d'une certaine incohérence dans la
gestion des chaînes en java, la méthode parseInt, si on lui
fournit comme argument une chaîne égale à null, renvoie un
NumberFormatException au lieu d'un
NullPointerException qui serait plus logique. Dans
lireCommeEntier, si le fichier est terminé (et que la
chaîne lue est null), on veut renvoyer une
NullPointerException ou une EOFException au choix.
Question 2.4 Correction de lireEntier
Il est assez maladroit de
renvoyer 0 en cas de fin de fichier, puisque c'est une valeur possible
pour un entier d'une part, et que d'autre part c'est une méthode de
traitement d'erreur « artisanale ».
Modifiez lireEntier pour qu'elle renvoie une
EOFException (type déjà existant) dans le cas où il n'y a
plus de texte à lire.
Question 2.5
On voudrait créer pour notre classe une exception
spécifique, qui serait nommée MauvaiseEntreeException. Les
données associées seraient :
- un message d'erreur, "Mauvaise entree : " + l'entrée erronée
- l'entrée erronée ;
- la question posée.
Implémentez cette classe, et utilisez-la pour lireCommeEntier.
Exercice 3 (pour les rapides)
Reprenez la classe bibliothèque, et examinez ce qui se produit si au
lieu de retourner null quand un ouvrage n'est pas trouvé, la méthode
qui retourne un élément à partir de son numéro d'inventaire lève une
exception.
Serge ROSMORDUC