1

したがって、次のように機能するメソッドisValidDNAを作成する必要があります。

public boolean isValidDNA()

DNAが有効な場合、つまり文字A、T、C、G(大文字)とこれらの文字の少なくとも1つのみが含まれている場合に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

あなたのやり方で、あなたはほとんどそれを手に入れました。

現時点では、 OK が見つかった場合に戻り、すべてが間違っている場合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 に答える