我使用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);