小编典典

java.lang.IndexOutOfBoundsException

java

我使用ArrayList为关卡中的每个矩形存储“阴影”,但是当我像这样迭代时:

for(int n = 0; n < shadows.size(); ++n){
 g2d.fillPolygon(shadows.get(n)[0]);
 g2d.fillPolygon(shadows.get(n)[1]);
 g2d.fillPolygon(shadows.get(n)[2]);
 g2d.fillPolygon(shadows.get(n)[3]);
 g2d.fillPolygon(shadows.get(n)[4]);
 g2d.fillPolygon(shadows.get(n)[5]);
}

我收到一个java.lang.IndexOutOfBoundsException看起来像这样的错误:Exception in thread "AWT- EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 42, Size: 79

为什么即使索引号不等于或大于大小也出现错误?该程序仍然可以正常运行,但是我仍然不希望它有任何错误。

我也尝试过的enchanced for循环,但后来我得到一个java.util.ConcurrentModificationException代替

for(Polygon[] polys : shadows){
 g2d.fillPolygon(polys[0]);
 g2d.fillPolygon(polys[1]);
 g2d.fillPolygon(polys[2]);
 g2d.fillPolygon(polys[3]);
 g2d.fillPolygon(polys[4]);
 g2d.fillPolygon(polys[5]);
}

阅读 214

收藏
2020-11-30

共1个答案

小编典典

ConcurrentModificationException使用增强的for循环时会得到一个事实,这意味着在迭代列表时,另一个线程正在修改列表。

出于相同的原因,使用普通的for循环进行循环时,您会收到不同的错误-列表的大小有所变化,但您仅检查size()循环入口处的约束。

解决此问题的方法有很多,但一种方法可能是确保对列表的所有访问都已同步

2020-11-30