2016-04-17 6 views
0

シンプルなルーレットを作ろうとしましたが、特定のプレイヤーのデータをすべて削除しようとしました。 :複数のオブジェクトのarraylistの下の特定のオブジェクトのデータを削除

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) 

これは(名前はデンマーク語であるので、私はデンマークに住んでいる)がクラッシュしたコードの私のラインです:

スピラーはantalSpillere、私のArraylistある選手の量、 denneSpillerが特定されています削除したいプレーヤーのデータ。

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

      Spiller denneSpiller = spillere.get(i); 

      if (denneSpiller.bank < 1){ 

       spillere.remove(denneSpiller); 
       antalSpillereCheck ++; 

      } 
      else { 
       antalSpillereMedPengeIBanken ++; 

      } 

     } 

forループを終了し、私はspiller.remove(denneSpiller);を削除した場合クラッシュしないだろうというときゲームが最初にクラッシュします。

答えて

1

アレイ内のインデックスは0から始まります。5個のオブジェクトが配列内にある場合、最後のインデックスは4です。あなたの例では

は、あなたがあなたの配列

Index: 2, Size: 2

に2つだけを持っている場合、インデックス2(第3要素)上のオブジェクトを削除したいです。

0

プレイヤーを削除するとantalSpillereが減少するため、forループの条件が無効になります。

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

で:だから、交換する必要がある選手が削除されるよう

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

spillere.size()が更新されます。

関連する問題