Faculté des Sciences de Bizerte Programmation Orientée Objet (JAVA)
Département Informatique GLSI 2
TP5 : LES EXCEPTIONS
Exercice 1 :
Que donne le programme CalculeMoyenne lancé avec les paramètres suivants (introduits
à travers la ligne de commande) : x 2 –1 30 18 et x –3 2.3 ?
Quelles sont les exceptions prédéfinies et capturées par ce programme ?
Quelles sont les exceptions crées par le programmeur ?
class CalculeMoyenne
{
static int moyenne(String[ ] liste) throws ExceptionRien
{
int somme=0,entier, nbNotes=0;
for (int i = 0 ; i<liste.length ; i++)
{
try
{
entier=Integer.parseInt (liste[i]);
if (entier < 0) throw new ExceptionIntervalle ("petite");
else if (entier>20) throw new ExceptionIntervalle ("grande");
else
{
somme+=entier;
nbNotes++;
}
}
catch (NumberFormatException e)
{
System.out.println("La note n°"+(i+1)+" n'est pas entière");
}
catch (ExceptionIntervalle e)
{
System.out.println ("La note n°"+(i+1)+ " est trop
"+e.getMessage());
}
}// fin for
if (nbNotes==0)
throw new ExceptionRien ( );
return (int)somme/nbNotes;
}
public static void main (String [ ] args)
{
try
{
System.out. println("La moyenne est : "+moyenne(args));
}
catch (ExceptionRien e)
{
System.out.println(e);
Page 1 sur 4
}
}
}
class ExceptionRien extends Exception
{
public String toString ( )
{
return ("Aucune note n'est valide");
}
}
class ExceptionIntervalle extends Exception
{
ExceptionIntervalle (String s)
{
super(s);
}
}
Exercice 2
Il s'agit de deviner ce que fait le programme suivant pour les instructions :
Java TestMoyenne 15 14 xx 12
Java TestMoyenne xx
Java TestMoyenne
Indication :
Java désigne ici le nom de l'interpréteur du langage Java
class TestMoyenne
{
static int moyenne (String [ ] liste) throws ArithmeticException
{
int somme=0,entier, nbNotes=0;
int i=0;
for (i=0;i<liste.length;i++)
{
try
{
entier=Integer.parseInt(liste[i]);
somme+=entier;
nbNotes++;
}
finally
{
System.out.println("Donnée traitée : "+liste[i]);
}
}
return somme/nbNotes;
}
public static void main(String [ ] args)
{
try
{
System.out. println("La moyenne est : "+moyenne(args));
}
catch (NumberFormatException e)
{
Page 2 sur 4
System.out.println("Erreur sur vos entiers");
}
catch (ArithmeticException e)
{
System.out.println ("Erreur, pas de paramètres");
}
}
}
}
Exercice 3
Soit la classe Temps suivante :
class Temps
{
private int heures;
private int minutes;
private int secondes;
Temps (int h, int m, int s)
{
heures = h;
minutes = m;
secondes = s;
}
public static void main (String [ ] args)
{
Temps t = new Temps (24, 12, 67);
}
}
1) Modifier le constructeur de cette classe de manière à ce qu'il lance une exception de
type TempsException (qu'il ne traitera) si les heures, les minutes ou les secondes ne
correspondent pas à un temps valide
2) Modifier le code de la méthode main de manière à ce que l'exception TempsException
soit traitée en affichant le message suivant : "Temps invalide"
Exercice 4
Soit le programme suivant qui calcule la factorielle d'un entier passé comme paramètre à
travers la ligne de commande :
public class TestFact
{
public static void main (String [ ] args)
{
int n = Integer.parseInt(args[0]);
if (n == 0) System.out.println ("La factorielle de "+n+" est: 1");
else {
int f = 1;
for (int i=2; i <= n; i++) f = f*i;
Page 3 sur 4
System.out.println ("La factorielle de "+n+" est: "+f);
}
}
}
Il s'agit de reprendre ce programme pour l'améliorer en attrapant différentes exceptions
de façon à préciser la difficulté à l'utilisateur, lorsque le calcul de la factorielle est
impossible.
Les exceptions à prévoir sont :
Il n'y a pas de paramètre sur la ligne de commande
Le paramètre n'est pas entier
Le paramètre est négatif
Pour chacun de ces cas l'erreur doit être signalée de façon précise à l'utilisateur.
Indications :
Si args[0] n'est pas un entier la méthode parseInt lance une exception instance
de NumberFormatException (du package java.lang)
Si l'accès à un tableau se fait avec un indice erroné (indice négatif ou supérieur à
la taille du tableau) une exception instance de
ArrayIndexOutOfBoundsException (du package java.lang) est lancée
Page 4 sur 4