-2

3つの変数を持つdnaという名前のJavaクラス:

  • シーケンスを格納する文字列
  • 文字列内の無効な文字の数を格納するint
  • 文字列内の有効な文字数を格納するint。

DNAシーケンス(acgt)を引数として取る1つのコンストラクター文字列。引数を確認して、無効な文字数と有効な文字数をカウントし、そのカウントを適切な変数に格納するにはどうすればよいですか。ここでは正規表現が使えないので迷ってしまいます。ここでStringのcharAtメソッドとifステートメントを使用するにはどうすればよいですか。

助けてください....

4

2 に答える 2

2

foreachループを使用して、各値を循環します。指定された文字がORcOR g OR Tのいずれにも一致しない場合(ここで手がかりを与えます)、それぞれの変数を増やすことができます。正規表現がない場合、これが最も効率的な方法です。これは、シーケンス内のすべての文字をチェックして、値がDNA文字列を正確に反映していることを確実に知る必要があるためです。

for(char c : dna)
{
    if(c == ..) // Compare against preset values.
    {
        // Update valid count.
    }
    else
    {
        // Update invalid count.
    }
}

これらの基本的な概念を自分で開発する必要があるので、これは私がやろうとしていることと同じくらい寛大です。

于 2013-03-02T13:46:51.080 に答える
0

これを行う多くの方法の1つは次のとおりです。

クラスで一定を維持する

private static final String bases = "atcg";

そして、値を格納するためのこれらの他のフィールド

String dna;
Integer numValid;
Integer numInvalid;

そして、コンストラクターでこのように使用します

public DNA(String dna) {
    this.dna = dna;
    for (char c : dna.toCharArray()) {
        if (bases.indexOf(c) < 0) {
            numInvalid++;
        } else {
            numValid++;
        }
    }
}

このような実装で得られる利点は、有効な文字のリストが変更された場合でも、条件を変更する必要がないことですif。これは、リストが大きく異なる場合に見栄えが悪くなる可能性があります。

于 2013-03-02T13:57:46.350 に答える