我想在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) {
}
}
你能帮我写一下这个方法吗?谢谢。
答案 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;
}
}
}