所以我一直在研究一个小坦克程序,但每当我尝试运行它时,我在第477行(http://pastebin.com/k4WNXE6Q)得到一个ArrayIndexOutOf BoundsException。
void placeStations(int Number) {
for (int i = 0; i<Number; i++) {
stations.add(new RefillStation(int(random(0, width)), int(random(0, height))));
// This line of code refuses to work. I get an 'ArrayIndexOutOfBoundsException: -3'
RefillStation station = stations.get(i);
for (Tank tank : tanks) {
if (station.getRectangle().intersects(tank.getRectangle())) {
station.kill();
i=i-1;
}
}
for (Obstacle obstacle : obstacles) {
if (station.getRectangle().intersects(obstacle.getRectangle())) {
station.kill();
i=i-1;
}
}
}
}
我已经尝试了几个小时才能找到错误,但我看不出与上面的方法有什么不同,这似乎工作正常。我在某些地方使用'i'类型循环,因为每当我尝试从现代for循环中的索引中删除某些东西时,它会给我一个大小更改异常。我有什么想法可以解决这个问题?
答案 0 :(得分:0)
与坦克和障碍物的多次重叠将导致i重复减少。但是你想只杀掉一次电台:突破循环。
for (Tank tank : tanks) {
if (station.getRectangle().intersects(tank.getRectangle())) {
station.kill();
i=i-1;
break;
}
}
答案 1 :(得分:0)
使用底层的迭代器,并且大多数时候你不能编辑一个你通过迭代器对象的remove()
方法而不是迭代的集合。要做到这一点,你必须明确地使用迭代器。见this answer
btw带有大写第一个字符的变量名称,但是让人们更难阅读和理解你的代码。
答案 2 :(得分:0)
我不确定这是否是问题,但不是ArrayList应该有索引的第一个参数和元素的第二个参数:
public void add(int index, E元素) 你的代码是:
stations.add(new RefillStation(int(random(0, width)), int(random(0, height))));
首先添加元素然后指定索引。