我創建了一個程序,用戶必須輸入一個序列,程序必須將每個三個字母與之前輸入的數據進行比較。總數據爲25個案例,這意味着程序必須比較Userseq的每個3個字符總共25個案例(每個3個字符的語句爲25個)。然後在完成第一個3個字符後,它移動到下一個3個字符,直到userseq完成。如果例子的前3個字符等於之前輸入的數據之一,則必須將其顯示在輸出中。我想要更少的代碼,並刪除我所有的if語句的另一種方式。我還有另外一個問題,那就是我要求程序做相同的事情,直到用戶羣的第三個字符的第十組爲止。如果用戶輸入少於10個3字符組(這意味着少於30個字符),程序會說「未處理的異常:System.ArgumentOutofrangeException:索引和長度必須引用字符串中的位置,這是我的代碼。 NB,那些代碼我通過只改變用戶eq編號(userseq1,userseq2 ..)寫了10次。是否有一種方法可以編寫程序來爲每個3字符的組重複相同的工作,直到userseq結束?是否有另一種更簡單的方法來編寫該程序?
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)定義二維數組 - 而不是'aa1','aa2'使用一個數組。 2)在檢查值後添加控制檯輸出字符串,所有檢查都將進入簡單循環。比較'N-1'字符串,最後一個是'Console.Write'輸出。 – i486