2016-03-23 12 views
0

の要素の最小値と最大値を決定するために、StudentScoreクラスのgetScore()メソッドを呼び出そうとしています。printStat() 。私はArrayIndexOutOfBoundExceptionを得ています。それはどういう意味ですか、どうすれば問題を解決できますか?オブジェクトのArraylistで分を検索すると、arraylistの要素を比較できません

public class ScoreCalculator{ 
    private int[] scoreCounter; 
    ArrayList<StudentScore> scores ; 

    public ScoreCalculator(int maxScore) { 
     scoreCounter = new int[maxScore]; 
     scores = new ArrayList<StudentScore>(maxScore); 
    } 

    public void printStat() { 
     System.out.println("Score Report for " + scores.size() + " Students "); 

     min = 0; 
     max = 0; 
     int j=0; 

     for (j = 0; j < scores.size(); j++) { 

      if (scores.get(j).getScore() < scores.get(j - 1).getScore()) { 
       min = scores.get(j).getScore(); 
      } 
      if (scores.get(j).getScore() > scores.get(j - 1).getScore()) { 
       max = scores.get(j).getScore(); 
      } 
     } 

     System.out.println(min); 
     System.out.println(max); 

    } 
+0

'J-1 'あなたのコード内で負になることができ、インデックス範囲は、0(サイズです)-1、負の値は、あなたが要素' J-1'にアクセス – haifzhan

+0

許可されていません。あなたのリストを注文することをお勧めします。最初の要素は 'min'で、最後の要素は' max'です。 –

答えて

1

for(j=0;j<scores.size();j++){ 

から

変更あなたのループは、フォームj=0を開始し、あなたがリストにj-1の要素にアクセスする場合は、必要になります問題がどこにあるかを確認してください。

j=0の場合は、-1にアクセスしてください。インデックス-1はありません。したがって、エラー。 j=1から始めるとこれが解決されます。

これは何らかの形で役立ちますか?

0

てください、

for(j=1;j<scores.size();j++){ 
0

近隣の値を比較するだけで、シーケンスの最小/最大を見つけることはできません。
値をmin/max-so-farと比較する必要があります。

if (scores.isEmpty()) 
    throw new IllegalStateException("No scores found"); 
int min = scores.get(0).getScore(); 
int max = min; 
for (int j = 1; j < scores.size(); j++) { 
    int score = scores.get(j).getScore(); 
    if (score < min) 
     min = score; 
    if (score > max) 
     max = score; 
} 
関連する問題