2017-04-17 3 views
-2

ユーザーが入力したテストスコアの平均を計算するプログラムを作成する必要があります。これは実際に私がこのプログラムを作るように依頼している2度目のことです。しかし今度は、ユーザーが0より小さいか100より大きいテストスコアを入力するたびにIllgalArgumentExceptionをスローするようにしたいと思っています。問題は、テストスコアが0〜100の間でも、プログラムがIllegalArgumentExceptionでクラッシュすることです。私は例外すべての入力に対してIllegalArgumentExceptionが発生するのはなぜですか?

予想される出力の最後に

Enter number of test scores:5 
Enter test score 1:70 
Enter test score 2:65 
Enter test score 3:94 
Enter test score 4:55 
Enter test score 5:90 
74.8 

と私のコード

public static void main(String[] args) throws IllegalArgumentException 
{ 
    Scanner input = new Scanner (System.in); 
    int numTests = 0; 
    int [] grade = new int [numTests]; 
    double average; 
    double totalGrades = 0; 

    System.out.print("Enter number of test scores:"); 
    numTests = input.nextInt(); 
    grade = new int[numTests]; 

    for (int index = 0; index < grade.length; index++) 
    { 
     System.out.print("Enter test score " + (index + 1) + ":"); 
     grade[index] = input.nextInt(); 


      if(grade[index] < 0 || grade[index] > 100); 
      { 
       throw new IllegalArgumentException(); 

      }   
    } 

    for (int i = 0; i < grade.length; i++) 
    { 
     totalGrades += grade[i]; 
    } 

    average = totalGrades/grade.length; 

    System.out.println(average); 

} 

private static class IllegalArgumentException extends Exception 
{ 
    public IllegalArgumentException() 
    { 
     super("Test scores must have a value less than 100 and greater than 0."); 
    } 

    public IllegalArgumentException(int value) 
    { 
     super("Invalid Test Score: " + value); 
    } 
} 
+1

なぜ新しいクラス 'IllegalArgumentException'を宣言しますか?単に 'java.lang.IllegalArgumentException'を使用して、パラメータとして必要なメッセージを供給するのはなぜですか? –

+0

@AndyTurner私はもともと2番目を持っていませんでしたが、エラーメッセージがループの一部として表示され、エラーメッセージが5回表示され、プログラムがクラッシュしませんでした –

答えて

5
if(grade[index] < 0 || grade[index] > 100); 
{ 
    throw new IllegalArgumentException(); 
} 

;せずにここで間違った期待される出力を任意のアイデアをやっているかわかりませんif行は、条件付きブロックにないため、無条件で実行されることを意味します。throw

if(grade[index] < 0 || grade[index] > 100) { /* do nothing */ } 
throw new IllegalArgumentException(); 

;を削除します。

あなたのコードは(事実上)と同じです。

関連する問題