1

所以我需要创建一个方法 isValidDNA ,它的工作原理如下:

公共布尔 isValidDNA()

如果 DNA 有效,即仅包含字母 A、T、C、G(大写)和这些字符中的至少一个,则返回 true。

我能想到的就是这个,这显然行不通:

    public boolean isValidDNA(){
    for (int i=0;i<dna.length();i++){
        if (dna.charAt(i)=='A' || dna.charAt(i)=='T' || dna.charAt(i)=='C' || dna.charAt(i)=='G' ){
            return true;
        }
        return false;
    }
}
4

6 回答 6

2

您可以使用此正则表达式:-[ATCG]+在代码中,这可能如下所示:

public boolean isValidDNA(){
    return dna.matches("^[ATCG]+$")
}
于 2013-02-28T10:44:19.163 回答
1

您立即创建一个 return 语句,它将在第一次迭代期间退出并且只检查第一个字符。

您需要将此信息存储在布尔值中,并在检查整个字符串后将其返回:

public boolean isValidDNA(String dna){
  Boolean result = true;
  // Add an extra check for the "at least one character" thing.
  for (int i=0; i<dna.length(); i++){
    if (dna.charAt(i)!='A' && dna.charAt(i)!='T' && dna.charAt(i)!='C' && dna.charAt(i)!='G' ){
        result = false;
    }
  }
  return result;
}

但是,您最好使用正则表达式来解决这些问题。

于 2013-02-28T10:43:34.433 回答
1

试试这种方式:

public boolean isValidDNA(){
    boolean res = true;
    for (int i=0;i<dna.length();i++){
        if ((dna.charAt(i) != 'A') && (dna.charAt(i)!='T') && (dna.charAt(i)!='C') && (dna.charAt(i)!='G') ){
            res = false;
            break;  
        }
    }
    return res;
}

如果您的出发点是 DNA 是有效的,那么测试它是否真的有效会容易得多。您只需要测试您的每个字符,dna并且可以在第一个不满足您的 if 语句的条目处停止。

于 2013-02-28T10:43:54.323 回答
1

用你的方式,你几乎得到它。

现在,true如果你找到一个没问题的,你就会回来,只有false在一切都错了的时候才会回来。你可以否定你的if条件,false一旦发现有问题就返回,只有在一切正常的情况下才能返回true

我将把编码部分留给你。

正如其他人指出的那样,正则表达式将是一个更清洁的解决方案。

于 2013-02-28T10:44:54.733 回答
1

你可以试试这个实现。

首先声明一个常量:

private static final String bases = "ATCG";

然后在这样的方法中使用它:

public boolean isValidDNA() {
    boolean isValid = true;
    for (char c : dna.toCharArray()) {
        if (bases.indexOf(c) < 0) {
            isValid = false;
            break;
        }
    }
    return isValid;
}
于 2013-02-28T10:55:12.010 回答
1
Scanner sc = new Scanner(System.in);
System.out.print("Enter a DNA sequence: ");
seq=sc.nextLine();    
    if(seq.matches(".*[^ATCG].*")){
        System.out.println("Not a valid sequence.");
        System.exit(0);
}

此正则表达式有效,因此仅包含 A、C、T 或 G 且不包含其他字符、空格等的序列将继续

于 2014-02-20T03:19:15.437 回答