我的代码似乎无法弄明白

时间:2017-03-06 02:32:58

标签: java

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的转换不起作用。有人可以帮助我吗?

3 个答案:

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

使用另一个变量来存储结果。