0

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

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

我在想这可能是由于数组列表的大小而发生的,但如果是这种情况,我会预计错误是在添加时出现,而不是在获取时出现。这是它正在死亡的代码:

    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

但它无论如何都会死,在获取时,而不是添加。我错过了什么?

4

7 回答 7

1

如果要增加 cnt,请确保它始终小于 chromnum.size()。

它应该是-

if (cnt < chromnum.size())
于 2013-04-05T03:48:43.703 回答
0

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

于 2013-04-05T03:49:08.060 回答
0

i如果 的大小也是 ,ArrayList则无法访问索引i。最大可访问索引是i-1。因此,IndexOutOfBoundsExceptionwhich 表示您正在尝试访问207493th 索引,即使您的大小List也是207493.

进行检查以限制cnt您的list.

于 2013-04-05T03:49:30.107 回答
0

因为,根据它看起来的代码,在if循环中你正在尝试一个

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

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

于 2013-04-05T03:50:17.687 回答
0

去掉等号,

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

希望能帮到你:)

于 2013-04-05T03:51:40.630 回答
0

请记住,列表从 0 开始,因此如果您有 N 个项目的列表,则最后一项将是 N - 1(因为 0 是第一个元素,1 是第二个元素,依此类推)

所以你应该写

if (cnt < chromnum.size()) {

代替

if (cnt <= chromnum.size()) {
于 2013-04-05T04:02:56.677 回答
0

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

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

于 2013-04-05T05:34:26.193 回答