for(int i1 = schuss.size()-1; i1 >= 0; i1--){
for(int i2 = (monster.size()-1) ; i2 >= 0; i2--){
if(monster.get(i2).getBounding().intersects(schuss.get(i1).getBounding())){
monster.get(i2).life--;
if(monster.get(i2).life <= 0){
monster.remove(i2);
}
schuss.remove(i1);
}
}
}
我总是得到一个例外,我无法理解为什么?
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 19, Size: 19
at java.util.LinkedList.entry(LinkedList.java:365)
at java.util.LinkedList.get(LinkedList.java:315)
at Defender_Pack.GameFrame.update(GameFrame.java:139)
at Defender_Pack.MainMethod.main(MainMethod.java:27)
如何在没有超出界限的情况下完成所有这些操作Exception以及为什么我会得到一个因为我认为我只要求索引绑定!
答案 0 :(得分:1)
i1被设置为outter循环中schuss的最后一个元素,但是在内循环中删除了一个元素。 i1不会被递减直到内循环完成,所以在第二次通过内循环时,i1现在已经超出界限。
我不确切地知道你想要完成什么,但是你应该将schuss.remove移到内循环之外:
for(int i1 = schuss.size()-1; i1 >= 0; i1--){
for(int i2 = (monster.size()-1) ; i2 >= 0; i2--){
if(monster.get(i2).getBounding().intersects(schuss.get(i1).getBounding())){
monster.get(i2).life--;
if(monster.get(i2).life <= 0){
monster.remove(i2);
}
}
}
schuss.remove(i1);
}
答案 1 :(得分:1)
按照上面的评论中的建议,在循环外进行删除。
List<Schuss> tempSchuss = new ArrayList<Schuss>(schuss);
List<Monster> tempMonster = new ArrayList<Monster>(monster);
for(int i1 = schuss.size()-1; i1 >= 0; i1--){
for(int i2 = (monster.size()-1) ; i2 >= 0; i2--){
if(monster.get(i2).getBounding().intersects(schuss.get(i1).getBounding())){
monster.get(i2).life--;
if(monster.get(i2).life <= 0){
tempMonster.remove(i2);
}
tempSchuss.remove(i1);
}
}
}
schuss = tempSchuss;
monster = tempMonster;
我认为你有Monster和Schuss的课程
答案 2 :(得分:0)
问题应该在以下几行:
schuss.remove(i1);
事实上 i1th 元素在你没有完成时被删除:下一个&#34;怪物&#34; 内部循环可能会尝试访问它。< / p>
修复程序取决于代码的目标,但添加
break;
在提到的指示之后,可以提供帮助。