2016-03-23 7 views
0

Ich versuche, die getScore() Methode in meiner StudentScore Klasse aufzurufen, die min und max über Elemente in einem ArrayList innerhalb des printStat() Verfahren unten dargestellt, um zu bestimmen . Ich bekomme eine ArrayIndexOutOfBoundException. Was bedeutet das und wie kann ich das Problem beheben?Finden min in Arraylist Objekt kann nicht die Elemente in einem Arraylist vergleichen

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 'kann in Ihrem Code negativ sein, Indexbereich beträgt 0 bis size() -1 wird negativer Wert nicht erlaubt – haifzhan

+0

Sie Zugriff auf Element' j-1'. Ich empfehle Ihnen, Ihre Liste zu ordnen, also ist das erste Element das 'min' und das letzte das' max'. –

Antwort

1

Wenn Ihre Schleifenform beginnt j=0, und Sie Zugriff auf das Element an j-1 in der Liste, werden Sie Sehen Sie, wo das Problem liegt.

Bei j=0 versuchen Sie, auf -1 zuzugreifen. Es gibt keinen Index -1. Daher der Fehler. Ausgehend von j=1 löst dies.

Hilft das in irgendeiner Weise?

0

bitte,

von

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

zu

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

Sie kann nicht finden Sie die min/max einer Sequenz nur durch den Vergleich benachbarten Werte.
Sie müssen Werte mit dem Min/Max-So-weit vergleichen.

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