import java.util.Scanner;
public class DNA{
public static void main(String [] args) {
Scanner scan = new Scanner(System.in);
System.out.println("What is the dna string?");
StringBuilder DNA = new StringBuilder(scan.nextLine());
DNA.append( scan.nextLine());
for(int i=0;i<DNA.length();i++){
if(DNA.charAt(i)=='A'){
DNA.setCharAt(i,'T');
}
if(DNA.charAt(i)=='T'){
DNA.setCharAt(i,'A');
}
if(DNA.charAt(i)=='G'){
DNA.setCharAt(i,'C');
}
if(DNA.charAt(i)=='C'){
DNA.setCharAt(i,'G');
}
}
System.out.println(DNA);
}
}
所以,那就是我现在的代码。它是一个基本的程序,需要DNA链,并给出它的对应物。但是,某些字母可以使用,而其他字母则不然。从T到A和从C到G的转换起作用,但是从A到T和从G到C的转换不起作用。有人可以帮助我吗?
答案 0 :(得分:2)
使用else if
语句使其只切换一次char。最好继续使用语句,因为稍后可能会将其他逻辑放在for循环的末尾。
for (int i=0;i<DNA.length();i++) {
if (DNA.charAt(i)=='A'){
DNA.setCharAt(i,'T');
} else if (DNA.charAt(i)=='T'){
DNA.setCharAt(i,'A');
} else if (DNA.charAt(i)=='G'){
DNA.setCharAt(i,'C');
} else if (DNA.charAt(i)=='C'){
DNA.setCharAt(i,'G');
}
}
答案 1 :(得分:0)
您最终将从A转换为T,然后将其从T转换回A以进行相同的迭代(字符)。如果符合,则使用continue
不进入下一个条件。 -
for (int i = 0; i < DNA.length(); i++) {
if (DNA.charAt(i) == 'A') {
DNA.setCharAt(i, 'T');
continue;
}
if (DNA.charAt(i) == 'T') {
DNA.setCharAt(i, 'A');
continue;
}
if (DNA.charAt(i) == 'G') {
DNA.setCharAt(i, 'C');
continue;
}
if (DNA.charAt(i) == 'C') {
DNA.setCharAt(i, 'G');
continue;
}
}
这将产生如下输出 -
What is the dna string? ATGC TACG
另外,您也可以在循环之前摆脱冗余的DNA.append( scan.nextLine());
。
答案 2 :(得分:0)
您正在第一个if
语句中将值从A替换为T,然后在第二个if
语句中将值从T更改为A.您对G到C的操作相同。
简单的解决方法是在break;
DNA.setCharAt(i,'YOUR_CHARS');
或
将else if
用于第2,第3和第4 if语句。
或
使用另一个变量来存储结果。