编写一个调用成员变量的方法

时间:2016-05-06 10:30:17

标签: java

我想在DNA串中找到基因。基因具有START和STOP密码子。

起始密码子是ATG。终止密码子是:TGA,TAA,TAG。

这是DNA字符串的一个例子: AA的 ATG CCC的 TAA Ť的 TAG AA 代码 TTCAA

为了找到一个基因,我们必须找到起始密码子(ATG)和最接近的终止密码子(TAG,TGA或TAA),这是距离起始密码子3个字符的倍数,所以在这种情况下基因将是

ATG CCC TAA

而不是

ATG CCCTAAT TAG

ATG CCCTAATTAGAA TGA

因为TAG离ATG和TGA只有7个字符,即使它有12个字符,它也不是最接近的终止密码子。

我要编写一个名为printAll的方法,其中包含一个参数String dna,它调用findStopIndex成员变量,该变量将用于打印DNA String中的所有基因,例如:CATGTAATAGATGAATGACTGATAGATATGCTTGTATGCTATGAAAATGTGAAATGACCCA。

这是我到目前为止编写的代码:

public class ProteinFinder {
    public void printAllStarts(String dna)  {
        int start = 0;
        while (true) {
            int loc = dna.indexOf("atg", start);
            if (loc == -1) {
                break;
            }
            System.out.println("Starts at " + loc);
            start = loc + 3;
        }
    }

    public int findStopIndex(String dna, int index) {
        int stop1 = dna.indexOf("tga", index);
        if (stop1 == -1 || (stop1 - index) % 3!=0) { 
            stop1 = dna.length();
        }
        System.out.println(stop1);

        int stop2 = dna.indexOf("taa", index);
        if (stop2 == -1 || (stop2 - index) %3 !=0) {
            stop2 = dna.length();
        }
        System.out.println(stop2);
        int stop3 = dna.indexOf("tag", index);
        if (stop3 == -1 || (stop3 - index) %3 !=0) {
            stop3 = dna.length();
        }
        System.out.println(stop3);
        return Math.min(stop1, Math.min(stop2, stop3));
    }    
    public void printAll(String dna) {

    }    
}

你能帮我写一下这个方法吗?谢谢。

1 个答案:

答案 0 :(得分:2)

这应该有效:

public void printAll(String dna) {
    int start = 0;
    while (true) {
        int atg = dna.indexOf("atg", start);
        if (atg == -1) {
           break; 
        }
        int end = findStopIndex(dna, atg+3);
        if (end != dna.length()) {
            System.out.println(dna.substring(atg, end+3));
            start = end + 3;
        }
        else {
            start = start+3;
        }
    }
}