2016-09-16 1 views
1
public static void main(String[] args){ 
........................ 
for(int i = 0; i<play.size(); i=i+1){ 
     System.out.println("the Winner is; " +Winners(play).get(i).name); 
    } 
} 

Dies ist die Hauptmethode. Ich habe nichts hier aufgeschrieben, weil es unnötig ist. im Grunde, was ich tue, ist, dass ich Winners Methode annonciere, die ArrayList<Game> als Argument nimmt. play ist vom Typ ArrayList<Game>. Darauf möchte ich die Elemente im Inneren bekommen und ihren Namen bekommen. damit der Name des Gewinners auf dem Bildschirm angezeigt wird. Ich für Schleife, weil es mehrere Gewinner geben kann. hängt davon ab, wie viele Aktien die gleiche Punktzahl haben.Java for Schleife ArrayList, indexoutofboundexception

private static ArrayList<Game> Winners(ArrayList<Game> gamers){ 
    ArrayList<Game> winner = new ArrayList<Game>(); 

    for(int i = 1; i==gamers.size(); i=i+1){ 

     if(gamers.get(i).getPoints()>gamers.get(i-1).getPoints()){  winner.clear();        
      winner.add(gamers.get(i)); 
     } 
     else if(gamers.get(i).getPoints()<gamers.get(i-1).getPoints()){ winner.clear(); 
      winner.add(gamers.get(i-1)); 
     } 

     else if(gamers.get(i).getPoints()==gamers.get(i-1).getPoints()){ winner.clear(); 
      winner.add(gamers.get(i)); 
      winner.add(gamers.get(i-1)); 
     } 

    } 

    return winner; 
} 

die Winners Methode gibt ein Arraylist<Game>, die ist, wo der Spieler oder die Spieler mit Bestnote gespeichert sind. Ich Schleife durch jeden der gamers und vergleichen Sie ihre points miteinander. derjenige, der die meisten Punkte erzielt hat, wird in der Arraylist Winner gespeichert.

ich clear die winner arraylist die ganze zeit einige elemente geht drinnen, weil ich nur die top-punkte dort gespeichert wollen.

Mein Problem ist, ich weiß nicht, ob ich es richtig mache. weil ich Fehler auf auf dem System.out.println("the Winner is; " +Winners(play).get(i).name); bekomme. es sagt Index 0 Größe 0 (IndexOutOfBoundsException)

+0

Warum Elemente innerhalb des bekommen gespeichert doesnt? – adamH

+1

'für (int i = 1; i == gamers.size(); i = i + 1) {' tut nicht, was ich denke, dass Sie denken, dass es tut :) – fvu

+0

btw können Sie 'i ++' anstelle von verwenden 'i = i + 1' –

Antwort

1
for(int i = 1; i==gamers.size(); i=i+1) 

Es bedeutet, wird die Schleife beendet, wenn i==gamers.size() falsch ist. Zum ersten Mal wenn i = 1, aber gamers.size() ist größer als 1. Es tritt nie in die Schleife ein. Und gibt eine leere Liste zurück. Wenn Sie versuchen, ein Element aus einer leeren Liste zu erhalten, erhalten Sie die Ausnahme.

Aber ich denke, Sie möchten i < gamers.size() überprüfen. Es könnte sein:

for(int i = 1; i < gamers.size(); i++) 

Auch hier brauchen Sie nicht winner.clear() in jedem wenn Block. Vielmehr könnten Sie:

private static ArrayList<Game> Winners(ArrayList<Game> gamers) { 
    ArrayList<Game> winner = new ArrayList<Game>(); 

    for (int i = 1; i < gamers.size(); i++) { 
     winner.clear(); 

     if (gamers.get(i).getPoints() > gamers.get(i - 1).getPoints()) { 
      winner.add(gamers.get(i)); 
     } else if (gamers.get(i).getPoints() < gamers.get(i - 1).getPoints()) { 
      winner.add(gamers.get(i - 1)); 
     } else { // last check when points are equal 
      winner.add(gamers.get(i)); 
      winner.add(gamers.get(i - 1)); 
     } 
    } 
    return winner; 
} 

N. B: Es gibt ein Problem bei der Annäherung Ihrer Winners() Methode. Sie durchlaufen über gamers und fügen einen winner der Liste hinzu. Aber jedes Mal, wenn Sie die Liste löschen. Das bedeutet, dass Sie nur den Gewinner der letzten beiden Spieler erhalten. Vorherige Gewinner werden geklärt. Ich denke, du musst es noch einmal überprüfen.

Während Sie die Liste löschen, entspricht die Größe der winner Liste nicht der Größe von play. Daher erhalten Sie in diesem Code auch eine Ausnahme.

for(int i = 0; i < play.size(); i=i+1) { 
    System.out.println("the Winner is; " + Winners(play).get(i).name); 
} 

One Fix könnte sein: [: Sieger tag] [tag: Arraylist]

ArrayList<Game> winnersList = Winners(play); 
for(int i = 0; i < winnersList.size(); i++) { 
    System.out.println("the Winner is; " + winnersList.get(i).name); 
} 
+0

Was ist los mit i == gamers.size ?. – adamH

+0

wenn ich es zu i <= gamers.size() ändere; Ich erhalte einen weiteren Index, der auf einen ausgehenden Fehler hinweist. auf den ersten if-Anweisungen. – adamH

+0

eigentlich wäre es 'i Shahid