有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在将列表数据放入映射时遇到异常

我正在迭代一个列表,并将其内容放在地图上,但问题是,当我返回该地图时,我发现了一个异常,请您告知其背后的原因。。我正在学习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());
}

乡亲们,请建议如何克服这个问题


共 (2) 个答案

  1. # 1 楼答案

    数组是零索引的。e、 g.100个元素的数组实际的有效索引范围为[0,99]。我假设这发生在p = pairList.get(i);行上

    你需要实现一些逻辑来确保你没有越界。您已经在使用迭代器对pairList进行迭代,这将保护您不受此影响,但您也在索引i中进行混合,这违背了迭代器的用途

    在尝试访问元素之前,至少要包含一个检查。比如:

    if (i >= pairList.size())
        break;
    
  2. # 2 楼答案

    你的问题是:

    p = pairList.get(i);
    

    如果列表大小为100,则允许的索引介于0到99之间