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 :

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