我使用ArrayList的次数不多,给人的印象是,要从变量中带出变量,我需要增强的for循环。

我试图带出变量并将它们的x值与另一个x和y值与另一个y值进行比较,如果它们匹配,请删除该变量。

到目前为止,我为该方法编写的代码是:

public int detect(int x, int y){
    int count=0;
    for (EnemyShip tempEnemy:EList){
        if(x==tempEnemy.x && y==tempEnemy.y){
            EList.remove(tempEnemy);
            count++;
        }
    }
    return count;
}


我知道问题出在EList.remove(tempEnemy);上,如果它是正常的for循环,我知道如何完成此任务。

但是这种增强的for循环(我的讲师称之为)使我感到困惑。

所以我想我的问题是如何从同时匹配x和y的Arraylist中删除变量?

最佳答案

因为坐标系上只有一艘船,所以您不需要计数器。

使用此代替:

01 boolean strike;
02 do {
03     strike = false;
04     for (EnemyShip tempEnemy: EList) {
05         if (x==tempEnemy.x && y==tempEnemy.y) {
06             strike = true;
07             EList.remove(tempEnemy);
08             break; // We need to break here, because the line07 maybe made
09             // the list empty and cause a ConcurrentModificationException.
10             // Also: tempEnemy is not longer part of the list "EList" so we have a invalid state.
11         }
12     }
13 } while (strike);

10-06 01:25