如何正确检查多个文本框输入的字符串是否按升序排列
应用逻辑修复方案
问题根源
你当前的校验逻辑存在核心错误:在收集完用户从10个文本框输入的内容后,对用户输入的集合做了Sort()升序处理,再和已经排好序的正确列表做匹配。这就导致只要用户输入的内容全都是列表框生成的有效值,不管输入顺序如何,两者排序后结果必然一致,所以永远返回成功提示。
修复方法
只需要删除btn_sort方法中对用户输入集合list2的排序语句即可,修改后的代码如下:
private void btn_sort(object sender, EventArgs e) { List<string> list2 = new List<string>(); // 获取列表框生成的随机字符串,排序得到标准升序结果 var correctSortedList = listBox1.Items.Cast<string>().ToList(); correctSortedList.Sort(); // 按文本框顺序收集用户输入,不做排序 list2.Add(textBox1.Text); list2.Add(textBox2.Text); list2.Add(textBox3.Text); list2.Add(textBox4.Text); list2.Add(textBox5.Text); list2.Add(textBox6.Text); list2.Add(textBox7.Text); list2.Add(textBox8.Text); list2.Add(textBox9.Text); list2.Add(textBox10.Text); // 直接对比顺序,内容和顺序完全一致才返回成功 if (correctSortedList.SequenceEqual(list2)) { MessageBox.Show("success"); } else { MessageBox.Show("fail"); } }
可选优化:修复生成列表可能重复的问题
你当前的generate_Click逻辑是连续10次随机从总库取值,可能会出现重复的字符串,不符合排序题的出题要求,可调整为随机打乱总库后取前10个,确保生成的10个值唯一:
private void generate_Click(object sender, EventArgs e) { listBox1.Items.Clear(); var random = new Random(); // 打乱总库顺序,取前10个不重复的值 var randomValues = values.OrderBy(x => random.Next()).Take(10).ToList(); foreach (var val in randomValues) { listBox1.Items.Add(val); } }
内容的提问来源于stack exchange,提问作者Bavish
相关产品推荐
相关产品推荐

