为了在基因组中找到基因,我们扫描起始密码子ATG, 记住它的索引,然后从下一个终止密码子TAG扫描。 如果插入序列的长度是3的倍数, 我们找到了一个基因。归还基因
这是我到目前为止所得到的:
public static void main(String[] args) {
System.out.println("This is a gene finder program.");
Scanner scan = new Scanner(System.in);
System.out.println("Enter the string that you want to locate genes:");
String geneString = scan.nextLine();
System.out.println(scanGene(geneString));
}
public static String scanGene(String geneString) {
int i = 0;
int x = 3;
int y = 3;
double startCondon, endCondon;
while (i < geneString.length() - 3) {
i = i+1;
x = x+1;
if(geneString.substring(i,x) == "ATG") {
startCondon = geneString.indexOf(x+1);
while (y<geneString.length()) {
y = y+1;
if (geneString.substring(y,y+4) == "TAG") {
endCondon = geneString.indexOf(y-1);
if ((endCondon - startCondon) % 3 == 0)
System.out.println("We have found a gene!");
}
}
}
}
return geneString.substring(x+1,y);
}
请帮忙吗?它似乎没有工作...由于某种原因,它给了我一个错误“超出范围”索引是一个负数或什么的。我查看了代码,但似乎无法找到任何错误的代码.... 感谢
答案 0 :(得分:2)
让我帮助你让它变得更简单。只需使用正则表达式匹配。以下将完全按照您的意愿执行,它会将“匹配”填充到所有结果中。或者,您可以使用m.group()并将结果放在任何您想要的位置。
String dna = "xxxATGxxxxxxxxxxxxxxTAGxxxxxxxxx";
Matcher m = Pattern.compile("ATG.*TAG").matcher(dna);
List<String> genes = new ArrayList<String>();
while (m.find()) {
genes.add(m.group());
}
您的“索引超出范围”错误意味着您正在尝试访问不存在的数组中的索引。 EG你有一个大小为10的数组,如果你试图访问数组[10],或数组[-1]或[0-9]之外的任何东西,你会得到这个错误。祝你好运!
答案 1 :(得分:0)
首先,改进你的变量名...... 其次,添加一些调试语句。
在子字符串之前,打印您要索引的内容的开始和结束索引。确保它永远不会-1。