删除多个对象的arraylist下的特定对象的数据

时间:2016-04-17 19:44:04

标签: java for-loop arraylist indexoutofboundsexception

我尝试制作一个简单的轮盘赌,但是当我尝试删除特定玩家的所有数据时(因为他们已经丢失了所有钱),我的游戏崩溃并显示错误:

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)

这是我崩溃的代码行(我住在丹麦所以名字都是丹麦语):

Spiller是我的ArraylistantalSpillere是玩家的数量, 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);,则不会崩溃。

2 个答案:

答案 0 :(得分:1)

数组中的索引从JTable开始,因此如果数组中有0个对象,则最后一个对象具有索引5

在您的示例中,当数组中只有两个

时,您希望删除索引4上的对象(第三个元素)
  

2

答案 1 :(得分:0)

由于移除玩家时antalSpillere会减少,因此你的for循环条件会变得无效。所以你需要替换:

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

使用:

for (int i = 0; i < spillere.size(); i++)
随着玩家被移除,

spillere.size()将会更新。