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

Java:为什么这个循环给我一个Java.lang.IndexOutOfBoundsException?,java,arrays,indexoutofboundsexception,Java,Arrays,Indexoutofboundsexception,在下面的示例代码中,我将遍历两个大型数组,40000多个索引,它们是x和y坐标。然而,在到达最终索引时,我被抛出了java.lang.IndexOutOfBoundsException——正如我通过大量测试推断的那样。我知道这个异常是在引用一个超出范围的索引时抛出的,但是,我不认为我引用的是任何超出范围的索引。此外,这个异常似乎只在某些计算机上抛出。非常感谢您的任何帮助 BufferedImage img = new BufferedImage(screenWidth, screenHeight

在下面的示例代码中,我将遍历两个大型数组,40000多个索引,它们是x和y坐标。然而,在到达最终索引时,我被抛出了
java.lang.IndexOutOfBoundsException
——正如我通过大量测试推断的那样。我知道这个异常是在引用一个超出范围的索引时抛出的,但是,我不认为我引用的是任何超出范围的索引。此外,这个异常似乎只在某些计算机上抛出。非常感谢您的任何帮助

BufferedImage img = new BufferedImage(screenWidth, screenHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = img.createGraphics();

for(int i = 0; i < arrayList.size()-1;){
    for(int j = 0; j < arrayList2.size()-1;){
        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));
        i++;    
        j++;
    }
}
BufferedImage img=新的BufferedImage(屏幕宽度、屏幕高度、BufferedImage.TYPE_INT_RGB);
Graphics2D g2d=img.createGraphics();
对于(int i=0;i
这里的问题是,您在内部循环中递增
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));
    }
}
for(int i=0;i

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

您可以发布您得到的异常吗?您可以在for循环括号中包含增量表达式,这就是为什么你应该正确地使用for循环,在循环的顶部增加索引。投票以打字错误结束。@HovercraftFullOfEels我很抱歉之前没有在我的上下文中解释,但是,由于我正在编写的实际项目,有必要同时遍历列表,而不是遍历第一个列表和第二个列表,如果这更有意义的话。很抱歉不,这毫无意义,这也是你的bug的原因。是的!太棒了,太谢谢你了!