web-dev-qa-db-fra.com

Est-ce la bonne façon d'utiliser une exception IllegalArgumentException?

J'essaie de travailler sur une affectation Java. Voici ce qu'il demande:

Ecrivez une classe nommée TestScores. Le constructeur de la classe doit accepter comme argument un tableau des scores de test. La classe devrait avoir une méthode qui renvoie la moyenne des scores au test. Si un résultat de test du tableau est négatif ou supérieur à 100, la classe doit lancer une IllegalArgumentException. Démontrer. J'ai besoin d'un fichier nommé TestScores et TestScoresDemo.

C'est ce que j'ai jusqu'ici. Je sais que certaines d'entre elles sont fausses et j'ai besoin d'aide pour les résoudre:

class TestScores {
    public static void checkscore(int s) {
        if (s<0) throw new IllegalArgumentException("Error: score is negative.");
        else if (s>100) throw new IllegalArgumentException("Error Score is higher then 100");
        else if (s>89)throw new IllegalArgumentException("Your grade is an A");
        else if (s>79 && s<90)throw new IllegalArgumentException("Your grade is an B");
        else if (s>69 && s<80)throw new IllegalArgumentException("Your grade is an C");
        else if (s>59 && s<70)throw new IllegalArgumentException("Your grade is an D");
        else if (s<60)throw new IllegalArgumentException("Your grade is an F");

        {
            int sum = 0; //all elements together
            for (int i = 0; i < a.length; i++)
                sum += a[i];
        }
        return sum / a.length;
    }
}

class TestScoresDemo {
    public static void main(String[] args) {
        int score = 0;
        Scanner scanner = new Scanner(System.in);
        System.out.print(" Enter a Grade number: ");
        String input = scanner.nextLine();
        score = Integer.parseInt(input);
        TestScores.checkscore(score);
        System.out.print("Test score average is" + sum);
    }
}

Je sais que la tâche appelle une déclaration try car dans mon livre, c'est ce que je vois avec IllegalArgumentException. Quelqu'un peut-il m'aider? J'utilise Eclipse comme IDE.

7
Alexandria

Votre classe TestScores doit avoir deux membres: un constructeur qui accepte un tableau de partitions et une méthode qui renvoie la moyenne des partitions. L’affectation n’est pas tout à fait claire pour savoir lequel d’entre eux devrait jeter une IllegalArgumentException si un résultat de test est en dehors des limites, mais j’en ferais le constructeur (puisque c’est ce qui a l’argument).

public class TestScores {
    public TestScores(int[] scores) throws IllegalArgumentException {
        // test the scores for validity and throw an exception if appropriate
        // otherwise stash the scores in a field for later use
    }

    public float getAverageScore() {
        // compute the average score and return it
    }
}

Vous êtes sur la bonne voie avec votre classe TestScoresDemo. Il faudra d’abord rassembler un ensemble de partitions dans un tableau. Ensuite, il devrait construire un objet TestScores. C'est ce qui doit être contenu dans un bloc try/catch car il peut générer une exception. Ensuite, il vous suffit d'appeler getAverageScore() et de faire quelque chose avec le résultat.

3
Ted Hopp

Une exception est quelque chose qui sert à définir quelque chose qui ne va pas dans le flux normal d'une application. Vous devez lancer l'exception IllegalArgumentException lorsque la méthode checkScore est appelée et qu'elle trouve tout argument en dehors de la plage (entre 0 et 100).

Votre classe devrait avoir cette structure:

public class TestScore {

    private int scores[]; //With setters and getters.

    public TestScore(int scores[]) {
        //Here, you set the scores array to the one on this class.
    }

    public int getAverage() {
        //You do the average here, and since you need to iterate over the 
        //array to sum each value, you can check the value and if it's not
        //ok you throw the IllegalArgumentException. No throws keyword
        //required since this kind of exception (like NullPointerException
        //and many others) are unchecked exceptions, meaning they can be 
        //thrown by a method and it does not need to specify them.
    }

}

La classe de test doit créer un objet TestScore avec un tableau int en tant que paramètre de son constructeur. Ensuite, vous créez une méthode testAverageScore contenant l'instruction try-catch, car il est nécessaire d'appeler la méthode getAverage.

J'espère que cela pourra aider. Bonne chance!.

EDIT: IllegalArgumentException est une exception non contrôlée.

0
Fritz