Autres propagations d'exceptions

           

Cet exemple n'apporte rien de nouveau et peut vous servir d'exercices. Il reste juste à savoir que la classe Exception possède un constructeur prenant en paramètre une chaîne de caractères et que la méthode getMessage de la classe Exception renvoie cette chaîne de caractères.

Vous pouvez aussi constater que plusieurs blocs catch peuvent se succéder eu attrapant des exceptions de types différents.

Essayez de répondre aux deux questions suivantes :

class ExceptionIntervalle extends Exception {
   ExceptionIntervalle(String s) {
      super(s);
   }
}

class Moyenne {
   static int moyenne(String[] liste) throws ExceptionRien {
      int somme = 0,entier, nbEntiers=0;
      int i;
    
      for (String chaine : liste) {
         try {	    
	     entier = Integer.parseInt(chaine);
	     if (entier < 0) throw new ExceptionIntervalle("petite");
	     if (entier>20) throw new ExceptionIntervalle("grande");
	     somme += entier;
	     nbEntiers++;
         }
	 catch (NumberFormatException e) {
	     System.out.println(chaine + " n'est pas entier");
	 }
	 catch (ExceptionIntervalle e)  {
	     System.out.println(chaine + " est trop "+ e.getMessage());
	 }
      }
      if (nbEntiers == 0) throw new ExceptionRien(liste.length);
      return somme/nbEntiers;
   }
}

class EssaiMoyenne {
    public static void main(String[] arg) {
	try {
	    System.out. println("La moyenne est "+ Moyenne.moyenne(arg));
	}
    catch (ExceptionRien e) { 
	e.printStackTrace();
      }
  }
}

Pour : java Moyenne ha 2 -3 27 18
ha n'est pas entier
-3 est trop petite
27 est trop grande
La moyenne est 10
Pour : java Moyenne ha -3
aucune des 2 chaines n'est valide
        at Moyenne.moyenne(Moyenne.java:28)
        at EssaiMoyenne.main(Moyenne.java:36)

Pour accéder au fichier Moyenne.java.


© Irène Charon Télécom ParisTech 2010