【问题标题】:Code is throwing an IndexOutOfBoundsException? [duplicate]代码抛出 IndexOutOfBoundsException? [复制]
【发布时间】:2017-01-27 18:36:05
【问题描述】:

谁能告诉我为什么这段代码不起作用?它会抛出一个IndexOutOfBoundsException

package blok6afvink6;

/**
 * 
 */

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;

public class Blok6afvink6 {

    public static void main(String[] args) throws FileNotFoundException {

        //1st, use Scanner to readin all sequence names and sequences;
        //create two arrayList to store sequence names and sequences;
        ArrayList<String> name = new ArrayList<String>();
        ArrayList<String> sequence = new ArrayList<String>();

        Scanner ScanLine = new Scanner(new FileReader("OverlapGraph.txt"));
        String seq = "";
        while (ScanLine.hasNextLine()) {
            String temp = ScanLine.nextLine();
            if (temp.charAt(0) == '>') {
                sequence.add(seq);
                name.add(temp.substring(1));
                seq = "";
            } else {
                seq += temp;
            }
        }

        ScanLine.close();
        sequence.remove(0);
        sequence.add(seq);

        //naam en seq printen
        int Len = name.size();
        for (int i = 0; i < Len; i++) {
            System.out.println(name.get(i) + ": " + sequence.get(i));
        }
        //3rd, connect all sequences with O3 overlap, put the linked-names into a new string ArrayList
        ArrayList<String> overLaps = linkOverlaps(name, sequence);

        System.out.println("\nPrintout results:");
        for (int i = 0; i < overLaps.size(); i++) {
            System.out.println(overLaps.get(i));
        }
    }

    private static ArrayList<String> linkOverlaps(ArrayList<String> name, ArrayList<String> sequence) {
        ArrayList<String> overLap = new ArrayList<String>();
        //int size = name.size();
        for (int i = 0; i < name.size(); i++) {
            int Len1 = sequence.get(i).length();

            for (int j = 0; j < name.size(); j++) {
                if (i != j && sequence.get(i).substring(Len1 - 3).equals(sequence.get(j).substring(0, 3))) {
                    String linked = name.get(i) + " " + name.get(j);
                    overLap.add(linked);
                }
            }
        }
        return overLap;
    }

}

错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.remove(ArrayList.java:492)
    at blok6afvink6.Blok6afvink6.main(Blok6afvink6.java:36)

【问题讨论】:

  • 因为您试图从 sequence ArrayList 中删除一个不存在的元素:sequence.remove(0);
  • 你怎么知道 ArrayLists 中总会有项目?
  • 您应该解释为什么您认为此异常与人们遇到相同异常的所有其他时间不同。
  • 在您处理线条以确保其正常工作时打印输出到屏幕。或者使用调试器逐步进行。任何你觉得更有用的东西

标签: java arraylist indexing


【解决方案1】:

异常中引用的第 36 行似乎是:

sequence.remove(0);

只有当列表为空时,此异常才会失败。

所以必须假设sequence.add(seq); 永远不会被调用。

如果没问题并且可以预期,您可以先检查是否为空:

if (!sequence.isEmpty()) {
    sequence.remove(0);
}

【讨论】:

    【解决方案2】:

    试试

    if(sequence.size() > 0) {
        sequence.remove(0);
    }
    

    【讨论】:

    • 请解释您提交的原因。 Stack Overflow 是知识分发中心,而不是代码编写服务。如果 OP 学会了钓鱼会很多更好
    • 在这种情况下,存在逻辑错误。我们没有概念错误。有时,简短的答案是最好的答案。感谢反馈
    【解决方案3】:

    仔细查看错误信息:

    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    

    您的某个集合的大小似乎为 0。如果是这样,则会导致此异常,因为您在尝试访问它们之前并不总是检查以确保集合实际上有任何项目。

    特别检查sequence

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2012-06-09
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2021-12-20
      相关资源
      最近更新 更多