Vous êtes sur la page 1sur 4

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