2014-10-27 63 views
0

我有和陣列在平鋪地圖上創建幾把劍,當我踏上它們時,它們需要被刪除,但是當我踩到它們時,遊戲崩潰。從陣列中除去東西但遊戲崩潰

在java.util.ArrayList中的$ Itr.checkForComodification(來源不明) 在java.util.ArrayList中的$ Itr.next(來源不明)

我的代碼:

我猜循環正在尋找對於即使被刪除的對象?

private List<Sword> swords = new ArrayList<Sword>(); 

我創建它們一次:

public GameRender(GameWorld world, int gameHeight) { 
    for (int i = 0; i<100 ; i++) { 
     swords.add(new Sword()); 
     } 

當我踩在上面:

for (Sword sword : swords) { 
     if(playery+7>=sword.position.y && playery+7<=sword.position.y+tilesize 
     && playerx+7>=sword.position.x &&playerx+7<=sword.position.x+tilesize) { 
       sword.pickMe(); 
       swords.remove(sword); 
     } 
    } 

有其他環路渲染():

for (Sword sword : swords) { 
     sword.createMe(); 
    } 

我不認爲你需要看劍類。如果你真的把它放在這裏。我如何解決它,所以我沒有得到錯誤?

+1

'ConcurrentModificationException'因爲你」重新使用增強型for循環,因此隱式地使用迭代器。迭代時,您無法修改正在迭代的列表。 – EpicPandaForce 2014-10-27 14:49:48

+0

對不起,我真的不明白。我對英文編碼不太瞭解。你能用代碼告訴我它是如何工作的嗎? – 2014-10-27 14:54:14

+0

我同時發佈了答案:p – EpicPandaForce 2014-10-27 14:55:06

回答

2
for (Sword sword : swords) { 
     if(playery+7>=sword.position.y && playery+7<=sword.position.y+tilesize 
     && playerx+7>=sword.position.x &&playerx+7<=sword.position.x+tilesize) { 
       sword.pickMe(); 
       swords.remove(sword); //this line throws ConcurrentModificationException 
     } 
} 

由於如何增強for循環的作品,您可能需要使用一個將其刪除:

​​

或以下類型:

for (int i = 0; i < swords.size(); i++) { 
     Sword sword = swords.get(i); 
     if(playery+7>=sword.position.y && playery+7<=sword.position.y+tilesize 
     && playerx+7>=sword.position.x &&playerx+7<=sword.position.x+tilesize) { 
       sword.pickMe(); 
       swords.remove(i--); 
     } 
    } 
+0

效果很好。謝謝,我並不擅長數組 – 2014-10-27 14:59:07