Java:为什么这个循环会给我一个java.lang.IndexOutOfBoundsException?

时间:2018-01-20 02:00:55

标签: java arrays indexoutofboundsexception

在下面的示例代码中,我移动了两个大型数组,40,000多个索引,x和y坐标。但是,我在达到最终索引时被apply抛出 - 正如我已经通过大量测试推断的那样。我知道当引用一个超出范围的索引时会抛出这个异常,但是,我不认为我指的是任何越界索引。此外,好像只会在某些计算机上抛出此异常。任何形式的帮助都非常感谢。

java.lang.IndexOutOfBoundsException

1 个答案:

答案 0 :(得分:4)

这里的问题是你在内循环中递增i,而不是在内循环完成之后。

以下代码应该表现得更好:

for(int i = 0; i < arrayList.size()-1; ++i){
    for(int j = 0; j < arrayList2.size()-1; ++j){

        g2d.setColor(col);
        g2d.setStroke(new BasicStroke(1));
        g2d.setRenderingHint(
              RenderingHints.KEY_ANTIALIASING,
              RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.drawLine(arrayList.get(i), arrayList2.get(j), arrayList.get(i+1), arrayList2.get(j+1));
    }
}

如果arrayList有10个元素,arrayList2有20个元素,那么您的代码将迭代内部循环19次。在内循环的每次运行中,您将增加ij。在内循环的第十次迭代之后,ij都等于10,代码arrayList.get(i+1)将失败。