2012-04-27 10 views
5

私はJavaの課題に取り組もうとしています。これは次のようなものです。これは、IllegalArgumentExceptionを使用する正しい方法ですか?

TestScoresという名前のクラスを作成します。クラスコンストラクターは、テストスコアの配列を引数として受け入れる必要があります。クラスには、テストスコアの平均を返すメソッドが必要です。配列のテストスコアが負または100より大きい場合、クラスはIllegalArgumentExceptionを投げるべきです。説明する。 TestScoresTestScoresDemoという名前のファイルが必要です。

これまで私がこれまで行ってきたことです。私はそれのいくつかが間違っている知っていると私はそれを固定の助けが必要です:

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

私はので、私はIllegalArgumentExceptionで見るものだ、私の本の中でtry文の割り当て呼び出しを知っています。誰でも助けてくれますか? EclipseをIDEとして使用しています。スコアの配列を受け取るコンストラクタとスコアの平均値を返すメソッド:

+2

は、なぜあなたは、これは間違っていると思いますか?あなたはいけない、エラーメッセージが表示されますか?どの部分を修正する必要があるか分からないと、私たちは手助けできません。 –

+0

ありがとうございます。私はチェックして、あなたに戻ってみましょう。たぶん、その単純な型エラー – Alexandria

+7

あなたが唯一の引数が0以下または100 – twain249

答えて

3

あなたTestScoresクラスには、二つの部材を持っている必要があります。テストスコアが範囲外であれば、これらのどれが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()に電話し、結果を何かする必要があります。

+0

上記のあなたのケースでは有効でない場合には、 'IllegalArgumentException'を投げるべきであるあなたみんなありがとう。私はそれを修正しようとするでしょう。何らかの理由で私はこの課題で本当に失われました。 – Alexandria

+0

@Alexandria - あなたは 'checkscore'メソッドであまりにも多くをやろうとしています。適切であれば、スコアをチェックし、 'IllegalArgumentException'をスローするだけです。それは他のことをすべきではありません。問題の他の部分を行うための他のメソッド(およびコンストラクタ)を記述します。それはあなたが元気になるのを助けるはずです。 –

-2
public class TestScores { 
private final int[] scores; 

public TestScores(int[] scores) { 
    this.scores = scores; 
} 

public int getAverage() { 
    int sum = 0; 

    if(scores.length == 0) { 
     return 0; 
    } 

    for(int score: scores) { 
     if(score < 0 || score > 100) { 
      throw new IllegalArgumentException("Score is not valid!"); 
     } 
     sum += score; 
    } 
    return sum/scores.length; 
} 

}

+5

...そして、OPがこの答えをコピーしてそれを提出すると、割り当ての全体が問題になり、OPはそこから何も学ばないでしょう。 –

+0

うわー。質問に「宿題」というタグが付いている場合は、答えをスプーンフィードするのが貧弱な形式です。宿題に関する質問と回答の方法については、[メタに関するよくある質問](http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions)を参照してください。 –

+1

ありがとうございます。彼のポストは実際には他の人たちの入力と助けに特に役立っていました。私は私の違いを見ることができます。そして私はこれについて私の本の中ですでに似たようなものを持っていました。私はちょうど今キャッチを追加し、それを正しく行う方法を考え出す必要があります。みんな、ありがとう。 – Alexandria

0

例外は、アプリケーションの通常の流れに右行かなかった何かを定義するために使用されるものです。メソッド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メソッドを作成します。

希望に役立ちます。がんばろう!。

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

+0

「スコア」の設定者は必要ありません。それはコンストラクタで渡されます。 (最終的なものでも可能です) –

+0

標準の使用を奨励することが始まったばかりです。将来、同じオブジェクトに新しい配列を設定したい場合はどうなりますか? – Gamb

+0

[Javaチュートリアル](http://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html)から:「オブジェクトは、作成後にその状態を変更できない場合、不可能とみなされます。不変オブジェクトは、シンプルで信頼性の高いコードを作成するための健全な戦略として広く受け入れられています。 –

関連する問題