2016-04-17 1 views
0

Ich habe versucht, ein einfaches Roulette zu machen, aber wenn ich versuche, alle Daten eines bestimmten Spielers zu entfernen (weil sie alles Geld verloren haben), stürzt mein Spiel ab und zeigt den Fehler an :Entfernen von Daten für ein bestimmtes Objekt unter einer Arraylist mehrerer Objekte

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 
    at java.util.ArrayList.rangeCheck(ArrayList.java:653) 
    at java.util.ArrayList.get(ArrayList.java:429) 
    at exam.Exam.main(Exam.java:330) 

Dies ist der Code meiner Linie, die (ich in dänisch leben in Dänemark so sind die Namen) stürzt ab: mein

Spiller Arraylist ist, antalSpillere die Anzahl der Spieler ist, denneSpiller die spezifisch ist Daten eines Spielers, den ich entfernen möchte.

  for (int i = 0; i < antalSpillere; i++) { 

      Spiller denneSpiller = spillere.get(i); 

      if (denneSpiller.bank < 1){ 

       spillere.remove(denneSpiller); 
       antalSpillereCheck ++; 

      } 
      else { 
       antalSpillereMedPengeIBanken ++; 

      } 

     } 

Das Spiel stürzt ab, wenn die erste for-Schleife endet, und würde nicht abstürzen, wenn ich die spiller.remove(denneSpiller); entfernt.

Antwort

1

Indizierung in Arrays beginnt bei 0, wenn Sie also 5 Objekte im Array haben, hat der letzte Index 4.

Index: 2, Size: 2

In Ihrem Beispiel wollen Sie Objekt auf Index 2 (drittes Element) löschen, wenn Sie nur zwei in Ihrem Array.

0

Da antalSpillere abnimmt, wenn Sie Spieler entfernen, wird Ihre for-loop-Bedingung als ein Punkt ungültig. Sie müssen also ersetzen:

for (int i = 0; i < antalSpillere; i++) 

mit:

for (int i = 0; i < spillere.size(); i++) 

spillere.size() als Spieler entfernt werden erhalten aktualisiert.

Verwandte Themen