我绝对不知道索引超出范围的原因。
起点来自字符串atg
中的字母ataaactatgttttaaatgt
,并以taa
结尾。我在这里缺少什么?
编辑:这就是这里的一行
String subStr1 = dna.substring(start,stop1);
/**
*
* @author Duke Software Team
*/
import edu.duke.*;
import java.io.*;
public class TagFinder2 {
public String findProtein(String dna) {
int start = dna.indexOf("atg");
int stop1 = dna.indexOf("tag", start+3);
int stop2 = dna.indexOf("tga",start+3);
int stop3 = dna.indexOf("taa",start+3);
String subStr1 = dna.substring(start,stop1);
String subStr2 = dna.substring(start,stop2);
String subStr3 = dna.substring(start,stop3);
String result;
if( subStr1.length() % 3 ==0 ){
return subStr1;
} else if (subStr2.length()%3==0){
return subStr2;
} else if (subStr3.length()%3 == 0) {
return subStr3;
} else {
return "";
}
}
private void stopCodon(String gene){
//This prints out the last 3 characters of the gene
String stopCodon = gene.substring(gene.length() - 3);
System.out.println(stopCodon);
}
public void testing() {
String a = "ataaactatgttttaaatgt";
String b = "acatgataacctaag";
String c = "AATGCTAGTTTAAATCTGA";
String result = findProtein(a);
stopCodon(result);
}
//public String stopCodon(String dna){
// return
// }
}
答案 0 :(得分:2)
int stop1 = dna.indexOf("tag", start+3);
String
a
不包含文本tag
,因此返回-1。因此,您最终会调用
String subStr1 = dna.substring(start,stop1);
使用参数7和-1导致AIOOB。
来自文档:
抛出:IndexOutOfBoundsException - 如果beginIndex为负数,或者 endIndex大于此String对象的长度,或 beginIndex大于endIndex。
答案 1 :(得分:0)
如果您分析或调试代码,您会发现stop1=-1,start=7
。当substring(7,-1)
时,怎么会出错呢?