Gérer des exceptions
Gérer des exceptions
Il s'agit de reprendre un précédent exercice sur le calcul d'une factorielle 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.
à partir du programme simple calculant la factorielle d'un entier donné sur la ligne de commande (si vous n'avez pas fait l'exercice précédent, vous pouvez utiliser cette version), essayez successivement en exécutant le programme :
- de ne pas faire figurer sur la ligne de commande le paramètre attendu
- de mettre un paramètre non entier
- de mettre un paramètre entier négatif
- de mettre l'entier 20
Dans les deux premiers cas, une exception est signalée. Dans les deux derners cas, le résultat est faux.
Vous devez modifier le programme pour que, dans chacun de ces cas, l'erreur soit attrapée par le programme et signalée à l'utilisateur.
- S'il n'y a pas de paramètre sur la ligne de commande, il s'agit d'une exception de type ArrayIndexOutOfBoundsException ; on souhaite que le programme affiche par exemple :
Indiquez le nombre d'entiers sur la ligne de commande
puis qu'il se termine.
- Si le paramètre indiqué ne représente pas un entier, il s'agit d'une exception de type NumberFormatException ; on souhaite que le programme affiche par exemple :
"L'argument doit être entier"
puis qu'il se termine.
- Si le paramètre est -4, on souhaite que le programme affiche par exemple :
-4 est négatif : la factorielle n'est pas définie
puis qu'il se termine.
Il faut pour cela définir sa propre classe d'exeption (voir l'indication plus bas).
- Si le paramètre est 20, on souhaite que le programme affiche par exemple :
ExceptionGrand: 20 est trop grand pour ce programme
puis qu'il se termine.
Il faut pour cela définir sa propre classe d'exeption (voir l'indication plus bas).
Indications
Le plus grand entier peut s'écrire en Java : Integer.MAX_VALUE
Vous pouvez utiliser par exemple les classes ci-dessous à condition de bien les étudier et de bien voir ce qu'elle donne lorsqu'elles interviennent dans un programme. Quand on définit une classe pour une exception, il ne faut pas oublier >extends Exception Vous pouvez aussi faire des variantes de ces classes d'exceptions.
class ExceptionNegatif extends Exception
{
int valeur;
ExceptionNegatif(int val)
{
valeur = val;
}
public String toString()
{
return valeur + " est négatif";
}
}
class ExceptionGrand extends Exception
{
ExceptionGrand(String s)
{
super(s);
}
}
Corrigé avec gestion d'exceptions