Vous êtes sur la page 1sur 3

Exercice 2 

:
1. Ecrivez une classe Factorielle qui, étant donné un entier fourni en ligne de
commande, calcule et affiche la factorielle de cet entier. On ne se préoccupera pas
pour l'instant des cas d'erreurs pouvant se produire. Voici des exemples d'exécution
java Fact 5
Série : Traitement des exceptions en Java 5! = 120
Exercice 1 : % java Fact 20
Soit le programme java suivant. Essayez de répondre aux deux questions suivantes 20! = -2102132736
 Que donne ce programme lancé avec: java ThrowsException ha 2 -3 27 18 % java Fact -2
 Que donne ce programme lancé avec: java ThrowsException ha -3 -2! = 1
class ExceptionIntervalle extends Exception % java Fact 3.2
{ Exception in thread "main" java.lang.NumberFormatException: 3.2
ExceptionIntervalle(String s) at java.lang.Integer.parseInt(Integer.java:409)
{ super(s); } at java.lang.Integer.parseInt(Integer.java:458)
} at Fact.main(Fact.java:4)
% java Fact
class ThrowsException { Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
static int moyenne(String[] liste) throws ExceptionRien { at Fact.main(Fact.java:4)
int somme=0,entier, nbNotes=0;
int i;
2. Expliquez en quelques mots les résultats obtenus ci-dessus.
for (i=0;i < liste.length;i++) 3. Ecrivez une classe ExceptionNegatif définissant une exception qui sera levée
{ try{ lors d'une tentative de calcul de factorielle d'un entier négatif. Cette classe aura
entier=Integer.parseInt(liste[i]); simplement un attribut entier valeur, un constructeur avec un paramètre entier
if (entier<0) throw new ExceptionIntervalle("petite"); (correspondant à valeur) et une redéfinition de la méthode toString().
else if (entier>20) throw new ExceptionIntervalle("grande");
else{ somme+=entier; nbNotes++; } 4. Ecrivez une classe ExceptionGrand définissant une exception qui sera levée lors
}catch (NumberFormatException e){ d'une tentative de calcul de factorielle d'un entier trop grand. Cette classe ne
System.out.println("La "+(i+1)+" eme note n'est "+ "pas entiere"); comprendra qu'un constructeur avec une chaîne de caractères en paramètre. Il
} catch (ExceptionIntervalle e){ affichera cette chaîne précédée du nom de la classe. Ainsi, l'instruction :
System.out.println("La "+(i+1)+" eme note est trop "+
ExceptionGrand e=new ExceptionGrand(20+" est un entier trop
e.getMessage());
} grand");
} provoquera l'affichage suivant :
if (nbNotes==0) throw new ExceptionRien(); ExceptionGrand: 20 est un entier trop grand
return (int) somme/nbNotes; 5. Modifiez la classe Factorielle. Elle devra avoir deux méthodes :
}
 la méthode calcul prenant en paramètre l'entier dont elle retourne la factorielle,
public static void main(String[] argv) et lançant les 2 types d'exceptions définis précédemment. Notez que vous ne
{ try pouvez déterminer qu'un nombre est trop grand pour en calculer la factorielle
{ System.out.println("La moyenne est "+moyenne(argv)); qu'au cours des étapes du calcul.
}catch (ExceptionRien e)  la méthode main qui traite tous les cas d'exceptions envisagés.
{ System.out.println(e); }
Voici des exemples d'exécution :
% java Factorielle
Indiquez le nombre d'entiers sur la ligne de commande
% java Factorielle -2
}} -2 est négatif : la factorielle n'est pas définie

1
% java Factorielle 15 System.out.println ("Alerte no :"+Niv); }
ExceptionGrand: 15 est trop grand pour ce programme }
% java Factorielle 1.2a class Propagation {
L'argument doit être entier int cte = 10;
static void m3 () throws MonException {
try {
Exercice 3 if (cte == 10) throw new MonException (3);
Soit le programme java suivant. Quel est l’affichage résultant de l’exécution de ce System.out.println ("Fin de try 3.");
programme? } finally{System.out.println ("Suite de m3.");
}
class MonException extends Exception
static void m2 () throws MonException {
{ MonException()
try { m3 ();
{ System.out.println("me voila"); }
System.out.println ("Fin de try 2.");
}
} finally{System.out.println ("Suite de m2.");}
class Propagation
}
{ static boolean probleme=true;
static void m1 (){
static void methodeBasse() throws MonException
try {
{
m2 ();
try { if (probleme) throw new MonException();
} catch (MonException e) {
System.out.println("et moi ?");
System.out.println ("Attrapée no :"+e.niveau); }
} finally {
System.out.println ("Suite de m1.");
System.out.println("hauteur basse : il faudrait etre ici");
}
}
System.out.println("pas mieux");
static public void main (String [] arg) {
}
m1 ();
static void methodeMoyenne() throws MonException
{
System.out.println ("Suite de main.");
try { methodeBasse();
}
System.out.println("et ici ?");
}
}finally{
System.out.println("moyenne hauteur : ou bien etre la");
} Exercice 5 :
} Soit la classe Temps
static void methodeHaute() public class Temps
{ {private int h, min,sec ;
try { methodeMoyenne(); public Temps(int _h,int m, int s){...}
} catch(MonException e) { public static void main (String [] arg)
System.out.println("attrape..."); {Temps t= new Temps(24,12,70);}}
}
} 1/ Compléter d’abord le constructeur, ensuite le modifier de façon à lancer une
static public void main(String[] argv) exception de type TempsException (à définir) qu’il ne traitera pas si les entrées
{ ne sont pas valides
methodeHaute();
}}
2/ Modifier la méthode main pour intercepter l’exception TempsException et
Exercice 4 : afficher un message adéquat.
Quel est l’affichage résultant de l’exécution de ce programme? 3/ Modifier la classe Temps pour permettre la lecture de trois entiers donnés par
class MonException extends Exception { l’utilisateur. Supposer que la suite des entiers est donnée dans une seule chaîne de
int niveau ; caractères.
MonException (int Niv) { Exercice 6 :
niveau = Niv ;

2
Reprendre la classe Pile pour traiter les exceptions adéquates et en afficher les
messages suivants : « Pile pleine » et « Pile Vide » lors des opérations
d’empilement et de dépilement. Pour cela on va définir qu’une seule classe
d’exception.

Vous aimerez peut-être aussi