我得到一个异常java.lang.IndexOutOfBoundsException,你能告诉它背后的原因是什么..我得到java.lang.IndexOutOfBoundsException:索引:100,大小:100,因为我的列表大小是100
for(Map.Entry<Long, Integer> entries : result.entrySet()){
pairList.add(new Pair(entries.getKey(), entries.getValue()));
}
int sum = 0;
int min = -1;
int max = -1;
int i = 0;
Pair p = pairList.get(i);
@SuppressWarnings("rawtypes")
//Iterator iterator = pairList.iterator();
Iterator iterator = pairList.listIterator();
while (iterator.hasNext()) {
if(sum == 0) {
min = (int) p.key;
max = (int) p.key;
}
sum += p.value;
if(sum < BARRIER){
max = (int) p.key;
} else {
if(sum > BARRIER){
i--;
} else {
max = (int) p.key;
}
System.out.println(min+"_"+max);
result1.put(min,max);
sum = 0;
}
i++;
p = pairList.get(i);
}
System.out.println("#########");
System.out.println(result1.size());
for (Map.Entry<Integer, Integer> entry : result1.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
现在我在点p = pairList.get(i);
处获得异常。数组被归零。例如100个元素的数组实际上具有[0,99]的有效索引范围。我假设这发生在p = pairList.get(i)行上;
现在请告知如何克服这个
答案 0 :(得分:0)
您应该使用迭代器来获取下一个列表项而不是使用pairList.get(i)。 使用
p =iterator.next();
答案 1 :(得分:0)
问题在于组合
while (iterator.hasNext())
{
...
i--
....
i++;
p = pairList.get(i);
请阅读如何使用Iterator
http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html
它是hasNext
和next
的组合。或者,使用“foreach”声明。
for (Pair p : pairList) {
。
如果您需要使用索引(i++
或i--
)迭代访问列表,则需要使用
if (i>=0 && i<pairList.size()) p = pairList.get(i);
else break; //??exit??
请注意,如果不使用hasNext
方法迭代迭代器,方法next
将返回true
p = pairList.next();
最后,在你的代码中
while(pairList.hasNext())
相当于
while(true)
你找了一个“break
”