我正在嘗試製作一個在屏幕上浮動的Asteroid對象的小程序。如果兩個小行星碰撞,那麼速度較慢的小行星應該分解成兩個較小的小行星。一旦小行星大小1,它應該消失。併發修改異常
當我嘗試比較兩個小行星時,我得到一個ConcurrentModificationException,我不知道爲什麼。
private volatile Collection<Asteroid> belt;
private void handleCollisions() {
Collection<Asteroid> psuedoBelt = belt;
Iterator<Asteroid> one;
Iterator<Asteroid> two;
for (one = psuedoBelt.iterator(); one.hasNext();) {
Asteroid aOne = one.next();
for (two = psuedoBelt.iterator(); two.hasNext();) {
Asteroid aTwo = two.next();
if (aOne.collidesWith(aTwo)) {
if (aOne.getSpeed() > aTwo.getSpeed()) {
Collection<Asteroid> split = aTwo.split();
two.remove();
for (Iterator<Asteroid> three = split.iterator(); three
.hasNext();) {
psuedoBelt.add(three.next());
}
} else {
Collection<Asteroid> split = aOne.split();
one.remove();
for (Iterator<Asteroid> three = split.iterator(); three
.hasNext();) {
psuedoBelt.add(three.next());
}
}
}
}
}
belt = psuedoBelt;
}
你做了什麼研究嗎?看看頁面的右側。 –
http://stackoverflow.com/a/1496221/1376108 – wisemann