web-dev-qa-db-ja.com

これはIllegalArgumentExceptionを使用する正しい方法ですか?

私はJava割り当てに取り組んでいます。これはそれが要求するものです:

TestScoresという名前のクラスを記述します。クラスコンストラクターは、引数としてテストスコアの配列を受け入れる必要があります。クラスには、テストスコアの平均を返すメソッドが必要です。配列内のテストスコアが負または100より大きい場合、クラスはIllegalArgumentExceptionをスローする必要があります。示す。 TestScoresおよびTestScoresDemoという名前のファイルが必要です。

これが今のところです。私はそれのいくつかが間違っていることを知っています、そしてそれを修正する助けが必要です:

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);
    }
}

私の本ではtryでそれが見えるので、割り当てはIllegalArgumentExceptionステートメントの呼び出しを知っています。誰か助けてもらえますか?私はEclipseをIDEとして使用しています。

7
Alexandria

TestScoresクラスには2つのメンバーが必要です。スコアの配列を受け入れるコンストラクターと、スコアの平均を返すメソッドです。テストスコアが範囲外の場合、これらのどれがIllegalArgumentExceptionをスローするかについては、割り当てが完全に明確ではありませんが、コンストラクターにします(引数があるため)。

_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
    }
}
_

TestScoresDemoクラスは順調に進んでいます。最初に、スコアのセットを配列に収集する必要があります。次に、TestScoresオブジェクトを作成します。これは、例外をスローする可能性があるため、try/catchブロック内にある必要があります。次に、getAverageScore()を呼び出して、結果を処理するだけです。

3
Ted Hopp

例外とは、アプリケーションの通常のフローでは正しく機能しないものを定義するために使用されるものです。メソッドcheckScoreが呼び出され、範囲外(0から100の間)の引数が見つかった場合は、IllegalArgumentExceptionをスローする必要があります。

クラスの構造は次のとおりです。

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.
    }

}

テストクラスは、コンストラクターのパラメーターとしてint配列を使用してTestScoreオブジェクトを作成する必要があります。次に、getAverageメソッドを呼び出す必要があるため、try-catchステートメントを含むtestAverageScoreメソッドを作成します。

お役に立てば幸いです。幸運を!。

編集: IllegalArgumentExceptionは未チェックの例外です。

0
Fritz