Java 这两段代码之间的区别是什么?

Java 这两段代码之间的区别是什么?,java,Java,第一个例子 int windowStart = 0; for (int i = 0; i + windowSize < fileArray.size(); i++) { ArrayList <Character> window = new ArrayList <Character> (); for (int s = windowStart; s <= windowStart + windowSize; s++) { window.add(fi

第一个例子

int windowStart = 0;

for (int i = 0; i + windowSize < fileArray.size(); i++) {
  ArrayList <Character> window = new ArrayList <Character> ();
  for (int s = windowStart; s <= windowStart + windowSize; s++) {
    window.add(fileArray.get(s));
  }
  windowStart++;
}
int windowStart=0;
对于(int i=0;i+windowSize对于(int s=windowStart;s您无法获得向列表中添加值的
索引自动边界异常
。问题是
s
的值等于或大于
文件数组
数组或列表的实际大小

因为两个例子中的循环是等价的,所以问题应该在您刚刚发布的代码行之外找到


如果您正在使用IDE,请尝试调试(在
IndexOutOfBoundsException
上中断,否则请添加一些简单的
System.out.println
语句,以找出
s
大于预期的原因。

从第一个示例中,从您告诉我的:

  • windowSize
    =30
  • fileArray.size()
    =235
然后,当
i+windowSize>235
(这意味着i=236-30=206`)时,您的第一个for循环将终止

您将意识到,
windowStart
在第一个
for循环
中递增,因此,
windowStart
最终将递增
205次(从0开始)


此时,循环的第二个
将计数(
windowStart=205
)和您的条件
s我将返回我的“Where's Waldo”书。错误在哪一行代码处?错误在
窗口中。添加(fileArray.get(s))第一个例子中的
行。
windowSize
的值是多少?试着使用调试器,检查
windowSize
值,并确保其初始化正确。@Andreas\u D,我目前被禁止发布问题,你能尝试取消删除我的一些帖子吗?我不知道自动禁止规则,也不知道无法发布非常痛苦。@Illumina-我无法找到您删除的帖子或问题,我必须使用数据库界面(自定义查询)但是要取消删除一个问题需要不止一个。你不能自己取消删除它们?在你的答案中,有一个答案是你在一次否决投票后编辑的。也许这已经有帮助了。我自己不能取消删除它们。我读到你需要10000信誉才能查看删除的帖子。
windowSize
是一个常量,在co的两个部分都是一样的de.然后
fileArray.size()
更改。它也是一个常量。
fileArray
对于两段代码都是相同的。我建议在这两种情况下都将示例1替换为示例2,然后运行,看看它是否没有中断。
int ind = 0;
for (int i = 0; i + windowSize < fileArray.size(); i++) {
  for (int b = ind; b <= windowSize + ind; b++) {
    window.add(fileArray.get(b));
  }
  ind++;
}