私は、ユーザがシーケンスを入力しなければならないプログラムを作成しました。そして、プログラムは、プログラム内で以前に入力されたデータとそれぞれの3文字を比較しなければなりません。そして、合計データは25のケースであり、これは、プログラムがUserseqの各3文字と合計25ケース(各3文字ごとに25 if文)を比較しなければならないことを意味します。その後、最初の3文字を完了すると、それはuserseqが終了するまで次の3文字に移動します。 exempleの最初の3文字が前に入力したデータの1つと等しい場合は、それを出力に表示する必要があります。私は少ないコードで別の方法を望んで、私のすべてのif文を取り消します。そして、私は別の問題を抱えています。私は同じ事をするためにプログラムを尋ねました。同じ比較はuserseqの3文字の10番目のグループまでです。ユーザーが10文字未満の3文字(30文字未満を意味する)のグループを入力した場合、プログラムは「未処理例外:System.ArgumentOutofrangeException:文字列内の位置を参照する必要があります。 NBは、これらのコードはuserseq番号(userseq1、userseq2 ..)のみを変更して10回書いた。userseqの終わりまで3つの文字の各グループの同じ作業を繰り返すために、プログラムに書き込む方法はありますか?もう一つの簡単な方法でそのプログラムを書くことができますか?
Console.Write("Enter your sequecnce: ");
string Userseq = Console.ReadLine();
string[] aa1 = { "TTT", "TTC" };
string[] aa2 = { "TTA", "TTG" };
string[] aa3 = { "CTT", "CTC", "CTA", "CTG" };
string[] aa4 = { "ATT", "ATC", "ATA" };
string[] aa5 = { "ATG" };
string[] aa6 = { "GTT", "GTC", "GTA", "GTG" };
string[] aa7 = { "TCT", "TCC", "TTCA", "TCG" };
string[] aa8 = { "CCT", "CCC", "CCA", "CCG" };
string[] aa9 = { "ACT", "ACC", "ACA", "ACG" };
string[] aa10 = { "GCT", "GCC", "GCA", "GCG" };
string[] aa11 = { "TAT", "TAC" };
string[] aa12 = { "TAA", "TAG" };
string[] aa13 = { "CAT", "CAC" };
string[] aa14 = { "CAA", "CAG" };
string[] aa15 = { "AAT", "AAC" };
string[] aa16 = { "AAA", "AAG" };
string[] aa17 = { "GAT", "GAC" };
string[] aa18 = { "GAA", "GAG" };
string[] aa19 = { "TGT", "TGC" };
string[] aa20 = { "TGA" };
string[] aa21 = { "TGG" };
string[] aa22 = { "CGT", "CGC", "CGA", "CGG" };
string[] aa23 = { "AGT", "AGC" };
string[] aa24 = { "AGA", "AGG" };
string[] aa25 = { "GGT", "GGC", "GGA", "GGG" };
string Userseq1 = Userseq.Substring(0, 3);
if (aa1.Contains(Userseq1))
{
Console.Write("Phe" + " ");
}
else if (aa2.Contains(Userseq1))
{
Console.Write("Leu" + " ");
}
else if (aa3.Contains(Userseq1))
{
Console.Write("Leu" + " ");
}
else if (aa4.Contains(Userseq1))
{
Console.Write("Ile" + " ");
}
else if (aa5.Contains(Userseq1))
{
Console.Write("Met" + " ");
}
else if (aa6.Contains(Userseq1))
{
Console.Write("Val" + " ");
}
else if (aa7.Contains(Userseq1))
{
Console.Write("Ser" + " ");
}
else if (aa8.Contains(Userseq1))
{
Console.Write("Pro" + " ");
}
else if (aa9.Contains(Userseq1))
{
Console.Write("Thr" + " ");
}
else if (aa10.Contains(Userseq1))
{
Console.Write("Ala" + " ");
}
else if (aa11.Contains(Userseq1))
{
Console.Write("Tyr" + " ");
}
else if (aa12.Contains(Userseq1))
{
Console.Write("STOP" + " ");
}
else if (aa13.Contains(Userseq1))
{
Console.Write("His" + " ");
}
else if (aa14.Contains(Userseq1))
{
Console.Write("Gin" + " ");
}
else if (aa15.Contains(Userseq1))
{
Console.Write("Asn" + " ");
}
else if (aa16.Contains(Userseq1))
{
Console.Write("Lys" + " ");
}
else if (aa17.Contains(Userseq1))
{
Console.Write("Asp" + " ");
}
else if (aa18.Contains(Userseq1))
{
Console.Write("Glu" + " ");
}
else if (aa19.Contains(Userseq1))
{
Console.Write("Cys" + " ");
}
else if (aa20.Contains(Userseq1))
{
Console.Write("STOP" + " ");
}
else if (aa21.Contains(Userseq1))
{
Console.Write("Trp" + " ");
}
else if (aa22.Contains(Userseq1))
{
Console.Write("Arg" + " ");
}
else if (aa23.Contains(Userseq1))
{
Console.Write("Ser" + " ");
}
else if (aa24.Contains(Userseq1))
{
Console.Write("Arg" + " ");
}
else if (aa25.Contains(Userseq1))
{
Console.Write("Gly" + " ");
}
else
{
Console.WriteLine(" \n You entered an invalid character. Other than A, T, C and G. Please check and retry.");
}
ギザギザの配列、つまり配列を含む配列を作成できます。または、名前とシーケンスのプロパティを持つオブジェクトの配列を作成してください –
私は辞書でそれを行うと思います。キーはシーケンスの3桁になり、表示するテキストの値( "Phe"、 "Leu" ...) – Pikoh
はい、もっとコンパクトにすることができます。1)2次元配列を定義する - aa1の代わりに、aa2は1つの配列を使います。 2)チェック値の後にコンソール出力文字列を追加すると、すべてのチェックが単純なループになります。 'N-1'文字列を比較し、最後は' Console.Write'出力です。 – i486