从arraylist android中删除

时间:2014-03-17 11:45:05

标签: java arraylist

我有一个安卓游戏,涉及一艘船射击敌人。我试图让它成为如果敌人在ammos的一定距离内,那么敌人将自己从屏幕上移开。我试图这样做,代码编译,但我不确定为什么敌人一旦被击中就不会从屏幕上移除。任何人都可以看到下面的代码有什么问题吗?三江源

for (TopEnemy i : newTopEnemy)
{
    for (int q = 0; q < ammo.length; q++)
    {
       float xsubs = i.enemyX - ammo[q].positionX;
       float ysubs = i.enemyY - ammo[q].positionY;
       float squared = (xsubs * xsubs) + (ysubs * ysubs);
       float distance = (float)Math.sqrt(squared);
       if (distance < 10.0)
       {
          newTopEnemy.remove(q);
       }
    }
 }  

4 个答案:

答案 0 :(得分:5)

不应该是newTopEnemy.remove(i);吗? q看起来像ammo上的索引。

答案 1 :(得分:3)

您需要使用Iteratore.remove

for (Iterator<TopEnemy> itr = intList2.iterator(); iterator.hasNext();) {
    TopEnemy enemy = itr.next();
    //code here 
    if (distance < 10.0) {
            itr.remove();
    }
}

答案 2 :(得分:1)

使用foreach循环时无法从列表中删除。您必须使用迭代器遍历列表,然后使用remove方法删除。

答案 3 :(得分:0)

我想补充一下Vlad回答,在循环遍历这样的列表时删除项目并不总是一个好主意。我会这样做:

for (int i = newTopEnemy.size()-1;i>=0;i--) {
    TopEnemy enemy = newTopEnemy.get(i);
    for (int q = 0; q < ammo.length; q++) {
        float xsubs = enemy.enemyX - ammo[q].positionX;
        float ysubs = enemy.enemyY - ammo[q].positionY;
        float squared = (xsubs * xsubs) + (ysubs * ysubs);
        float distance = (float)Math.sqrt(squared);
        if (distance < 10.0) {
            newTopEnemy.remove(i);
            break;
        }
    }
}