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++;
}