我正在尝试制作一个在屏幕上浮动的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