Java 代码正在抛出IndexOutOfBoundsException?
有人能告诉我为什么这个代码不起作用吗?它抛出一个Java 代码正在抛出IndexOutOfBoundsException?,java,arraylist,indexing,Java,Arraylist,Indexing,有人能告诉我为什么这个代码不起作用吗?它抛出一个索引outofboundsException 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
索引outofboundsException
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
似乎您的一个集合的大小为0。如果是这样,则会导致此异常,因为在尝试访问集合之前,您并不总是检查以确保集合中确实有任何项
请特别检查序列。仔细查看错误消息:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
似乎您的一个集合的大小为0。如果是这样,则会导致此异常,因为在尝试访问集合之前,您并不总是检查以确保集合中确实有任何项
特别要检查序列。异常中引用的第36行似乎是:
sequence.remove(0);
只有当列表为空时,此操作才会失败,并出现此异常
所以我们必须假设sequence.add(seq)代码>从未被调用
如果这是正常的,您可以先检查是否为空:
if (!sequence.isEmpty()) {
sequence.remove(0);
}
异常中引用的第36行似乎是:
sequence.remove(0);
只有当列表为空时,此操作才会失败,并出现此异常
所以我们必须假设sequence.add(seq)代码>从未被调用
如果这是正常的,您可以先检查是否为空:
if (!sequence.isEmpty()) {
sequence.remove(0);
}
试一试
试一试
因为您正试图从序列
数组列表
中删除不存在的元素:序列。删除(0)代码>您如何知道ArrayList中始终包含项?您应该解释为什么您认为此异常与其他所有出现相同异常的时间不同。在处理行时打印到屏幕,以确保其正常工作。或者使用调试器进行单步调试。如果您试图从序列
数组列表
中删除一个不存在的元素,则会发现更有用的内容:序列。删除(0)代码>您如何知道ArrayList中始终包含项?您应该解释为什么您认为此异常与其他所有出现相同异常的时间不同。在处理行时打印到屏幕,以确保其正常工作。或者使用调试器进行单步调试。无论您发现什么更有用,请解释为什么您提交了您提交的内容。堆栈溢出是一个知识分发中心,而不是一个代码编写服务。如果OP学会了如何捕鱼,那会好得多。在这种情况下,有一个逻辑错误。我们没有概念上的错误。有时候,简短的答案是最好的答案。通过反馈感谢请解释为什么您提交了您提交的内容。堆栈溢出是一个知识分发中心,而不是一个代码编写服务。如果OP学会了如何捕鱼,那会好得多。在这种情况下,有一个逻辑错误。我们没有概念上的错误。有时候,简短的答案是最好的答案。感谢您的反馈