获取索引超出绑定的异常

时间:2014-02-02 08:20:13

标签: java

我得到一个异常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)行上; 现在请告知如何克服这个

2 个答案:

答案 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

它是hasNextnext的组合。或者,使用“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