Java arraylist outofbounds

时间:2013-04-05 03:46:17

标签: java arrays arraylist

我知道这个问题已被问过一百万次了。而且我觉得这个解决方案对那些没有盯着它看几个小时的人来说是相当明显的。但是,我无法做出我的出界异常的正面或反面。这是错误:

exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 207493, Size: 207493
    at java.util.ArrayList.rangeCheck(ArrayList.java:604)
    at java.util.ArrayList.get(ArrayList.java:382)
    at affysureselect.AffySureSelect.main(AffySureSelect.java:92)
Java Result: 1

我想也许这可能是由于arraylist的大小而发生的,但如果是这种情况,我会预料到错误是在添加时,而不是获取。这是它正在死的代码:

    String chrompos;
    ArrayList<String> chromnum = new ArrayList<String>();
    while ((input2 = sbuff.readLine()) != null) {
        prse = input2.split("\t");
        chromnum.add(prse[0]);
        ...
        chrompos = prse[7];
     }
    int cnt = 0;
    int cnt2 = 0;
    if (chromnum.get(cnt).equals(chrompos)) { // line causing my untimely death
      end = Integer.parseInt(chromposend.get(cnt2));
      start = Integer.parseInt(chromposstart.get(cnt2));
       ...

我甚至尝试添加:

if (cnt <= chromnum.size()) { //this line
  if (chromnum.get(cnt).equals(chrompos)) { /before the dying line

但无论如何,它会在get,而不是add。我错过了什么?

7 个答案:

答案 0 :(得分:1)

如果要递增cnt,请确保它总是小于chromnum.size()。

应该是 -

if (cnt < chromnum.size())

答案 1 :(得分:0)

索引我不存在。您必须始终迭代到list.size() - 1

答案 2 :(得分:0)

如果i的尺寸也是ArrayList,则无法访问索引i。最大可访问索引为i-1。因此,IndexOutOfBoundsException表示您尝试访问207493索引,即使List的大小也是207493

选中此选项可将cnt限制在list的大小以下。

答案 3 :(得分:0)

根据代码看起来,在 if 循环中你正在尝试

 chromnum.get(cnt) and cnt is initialized to 0.

所以最可能的问题是代码从未进入while循环,juts在while循环之后放置一个SOP并检查arraylist大小。

答案 4 :(得分:0)

删除等号,

if (cnt < chromnum.size()) { //this line
      if (chromnum.get(cnt).equals(chrompos)) {

希望能帮到你:)。

答案 5 :(得分:0)

请记住,列表以0开头,所以如果你有一个N项的列表,那么最后一项将是N - 1(因为0是第一个元素,1是第二个,依此类推)

所以你应该写

if (cnt < chromnum.size()) {

而不是

if (cnt <= chromnum.size()) {

答案 6 :(得分:0)

像帕斯卡尔一样基于1:美国,讲英语的加拿大 基于0的C / Java:魁北克,(大部分?)欧洲。

这就是答案。问题是,如何在电梯中索引楼层。