En Java, les exceptions sont un concept clé qui vous permet de gérer le comportement de votre programme dans des cas extraordinaires. Voici la classe RevisedRatio :
public static class RevisedRatio {
/**
* @pre n1 et n2 sont des chaînes de caractères != null
* @post après conversion de n1 et n2 en entier, retourne n1/n2, peut lancer une NumberFormatException si un des strings n'est pas un nombre
*/
public static int divise(String n1, String n2) {
int n = Integer.parseInt(n1);
int d = Integer.parseInt(n2);
return doDivise(n, d);
}
/**
* @pre n et d sont des entiers
* @post retourne n/d si d!=0, sinon throws AritmeticException
*/
public static int doDivise(int n, int d) {
return (n/d);
}
/**
* @pre args contient un tableau de String passés en ligne
* de commande
* @post si args contient seulement un String, affiche un
* message d'erreur sinon affiche le résultat de la
* division de args[0] par args[i] pour tout
* 0 < i < args.length, un résultat par ligne
*/
public static int div(String[] args) {
if(args.length < 2) {
System.out.println("Erreur : la ligne de commande doit être :");
System.out.println("java ratio num1 num2 num3... ");
System.exit(-1);
}
else {
for(int i=1; i<args.length;i++) {
/*1*/ // À réécrire
System.out.println(args[0] + "/" + args[i] +
" = " + divise(args[0], args[i]));
}
}
return 0;
}
public static void main(String[] args){
if(div(args) != -1){
System.out.println("Tout s'est bien passé");
System.exit(0);
}
else{
System.out.println("Veuillez donner des arguments "
+"corrects la prochaine fois.");
System.exit(-1);
}
}
}
La méthode div récupère les arguments de la méthode main qui l'appelle et traite la division de args[0] par args[i] pour tout 0 < i < args.length. La méthode affiche la réponse sous la forme "args[0]/args[i] = reponse". Par exemple, quand on l'appelle avec les arguments "20", "5" et "10", la méthode affiche sur la sortie standard :
20/5 = 4 20/10 = 2
Pour le moment, l'appel à cette méthode avec de mauvais arguments pourrait faire crasher le programme en lançant une NumberFormatException ou une ArithmeticException.
Réécrivez entièrement l'intérieur de la boucle for de manière à ce que lorsqu'une de ces deux exceptions est lancée, la méthode affiche le message d'erreur Vous ne pouvez pas diviser par 0. pour la division par 0 et le message La chaîne de caractères passée à parseInt() ne contient pas que des chiffres. pour l'erreur de parsing, sur la sortie d'erreur standard et retourne directement la valeur -2. Sur la sortie d'erreur standard, on doit pouvoir voir par exemple, en cas de NumberFormatException:
La chaîne de caractères passée à parseInt() ne contient pas que des chiffres.
INGInious