我正在尝试创建一个程序,该程序比较两个数组,然后计算匹配和不匹配的次数。如果存在不匹配项,它将把这些项存储到一个数组中,并告诉我哪些项不匹配。
我的不匹配数组将正确的值返回到列表框,但是我需要将其返回到带有串联值的标签。
到目前为止,我尝试过的唯一不会出错的方法是label.text = string.join(", " mismatched)
,但它没有返回实际值。
//correct counter
int correct = 0;
//incorrect counter
int incorrect = 0;
ArrayList Mismatch = new ArrayList();
if (A[0] == B[0]) {
correct++;
} else {
incorrect++;
Mismatch.Add("1");
}
if (A[1] == B[1]) {
correct++;
} else {
incorrect++;
Mismatch.Add("2");
}
当我尝试在标签中返回concat值时,它返回“ system.collection ...”。
它应该返回:
如果A [0] = B [0]和A [1] = B [1]匹配,则标签=空值或空白(无关紧要)。
如果A [0] = B [0]但A [1]!= B [1],则标签=“ 2”。
如果都不匹配,则标签返回“ 1、2”
答案 0 :(得分:2)
使用List代替ArrayList。您还可以使用for
循环遍历数组:
int correct = 0;
int incorrect = 0;
if (A.Length == B.Length)
{
List<string> Mismatch = new List<string>();
for(int i = 1; i <= A.Length; i++)
{
if (A[i-1] == B[i-1])
{
correct++;
}
else
{
incorrect++;
Mismatch.Add(i.ToString());
}
}
label1.Text = String.Join(", ", Mismatch);
}
答案 1 :(得分:0)
请参阅我的评论ArrayList。我使用了2个数组和2个列表
private void button1_Click(object sender, EventArgs e)
{
string[] A = { "Mathew", "Mark", "Luke", "John" };
string[] B = { "Peter", "Mark", "Paul", "John" };
List<string> Mismatch = new List<string>();
List<string> Matched=new List<string>();
if (A.Length != B.Length) { return; }
int i;
for (i =0; i < A.Length; i++)
{
if (A[i] == B[i])
{ Matched.Add($"A and B match with {A[i]} at position {i}"); }
else
{ Mismatch.Add($"Mismatch at position {i} A contains {A[i]} B contains {B[i]}"); }
}
int correct = Matched.Count;
int incorrect = Mismatch.Count;
MessageBox.Show($"The number of correct is {correct}{Environment.NewLine}The number of incorrect is {incorrect}");
label1.Text = String.Join(Environment.NewLine, Mismatch);
label4.Text = String.Join(Environment.NewLine, Matched);
}