Information

Author(s) François MICHEL, Brandon NAITALI
Deadline No deadline
Submission limit No limitation

Sign in

Mission 10 : Question de démarrage 1 : Traitement des exceptions

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.

L'intérieur de la boucle for

Réécrivez entièrement l'intérieur de la boucle for (/*1*/). Veillez à n'écrire que l'intérieur de la boucle.