基因组中的基因 - 程序

时间:2013-11-11 01:00:54

标签: java loops if-statement while-loop

为了在基因组中找到基因,我们扫描起始密码子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);
}

请帮忙吗?它似乎没有工作...由于某种原因,它给了我一个错误“超出范围”索引是一个负数或什么的。我查看了代码,但似乎无法找到任何错误的代码.... 感谢

2 个答案:

答案 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。