【发布时间】:2012-05-03 01:46:09
【问题描述】:
这是发生问题的代码,我已将第 90 行加粗(错误消息表明问题源于此)[编辑:我不知道如何在代码块内加粗,我将其标记为一个箭头代替]:
while ((l<=list_L.size())&&(i<=list_I.size())) {
if (list_I.get(i).url.compareTo(list_L.get(l).src) == 0) { //<--- LINE 90
int firstmatch = l;
int outgoing = 1;
l++;
while (list_I.get(i).url.compareTo(list_L.get(l).src) == 0) {
outgoing++;
l++;
}
l = firstmatch;
for (int k=0; k<outgoing; k++) {
list_R.add(new Triplet(list_L.get(l).src, list_L.get(l).dest, list_I.get(i).rank / outgoing));
l++;
}
}
else {
sum_T += list_I.get(i).rank; //This shouldn't happen in this case...
}
i++;
}
这是错误信息:
线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引: 118981, 尺码: 118981
在 java.util.ArrayList.RangeCheck(未知 来源)
在 java.util.ArrayList.get(未知来源)
在 PageRank.main(PageRank.java:90)
我不知道出了什么问题,因为它不是空指针异常,就像我所期望的那样,如果出现问题...
更新: 好的,我在初始位置解决了问题,但现在这里发生了:
for (int p=0; p<list_I2.size(); p++) {
L2_norm += Math.pow((list_I.get(p).rank - list_I2.get(p).rank), 2); // <-- LINE 146
}
错误信息:
线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引: 118981, 尺码: 118981
在 java.util.ArrayList.RangeCheck(未知 来源)
在 java.util.ArrayList.get(未知来源)
在 PageRank.main(PageRank.java:146)
list_I 和 list_I2 大小相同,我在调试中已经确认。
【问题讨论】:
-
在条件检查中
while ((l<=list_L.size())&&(i<=list_I.size())) {尝试从两者中删除=。 -
这里的异常很清楚,您可能应该将条件更改为 i
-
IOOBE 与 NPE 一样“独特”。这个问题“过于本地化”,应该可以通过调试轻松解决——例如使用调试器 - 并仔细阅读错误消息。
标签: java loops indexoutofboundsexception