next up previous
suivant: À propos de ce

TP de Java 22e Année Informatique 2003-2004

Exercice 1 label=MaConsole.java,frame=single

Question 1.1 label=MauvaiseEntreeException.java,frame=single

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.

Question 2.6 écriture (pas d'exception ici)

écrire une méthode :
void ecrire (String s)
écrit s sur la console
et une méthode
void ecrire (int i)
écrit i sur la console

Question 2.7 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.8 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.9 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.10 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.11

On voudrait créer pour notre classe une exception spécifique, qui serait nommée MauvaiseEntreeException. Les données associées seraient :

Implémentez cette classe, et utilisez-la pour lireCommeEntier.

Question 2.12

écrivez une méthode lireCommeLigneNonVide, qui lise une ligne non vide. Si la ligne est vide, la méthode doit renvoyer une MauvaiseEntreeException.






next up previous
suivant: À propos de ce
Serge ROSMORDUC 2003-09-29