C#中比较两个字符串列表元素,支持数值误差范围校验方案
C#实现答题答案比对(支持数值误差范围+安全类型转换)
核心思路
- 用
double.TryParse做安全数值转换,避免转换失败抛出异常 - 对每一对答案执行以下逻辑:
- 若两者都能成功转换为double,判断绝对值差≤0.1即视为正确
- 若任意一方转换失败,直接比对字符串是否相等(可按需选择是否忽略大小写)
完整实现代码
using System; using System.Collections.Generic; class AnswerChecker { static void Main(string[] args) { List<string> givenAnswers = new List<string>() { "True","False","True","False","True", "60","50","2.321","0.8","1.55" }; List<string> correctAnswers = new List<string>() { "True","False","False","True","False", "70","20","1.231","0.5","1.25" }; // 遍历比对每一组答案 for (int i = 0; i < givenAnswers.Count; i++) { bool isCorrect = IsAnswerCorrect(givenAnswers[i], correctAnswers[i]); Console.WriteLine($"第{i+1}题:用户答案「{givenAnswers[i]}」,正确答案「{correctAnswers[i]}」,判定结果:{(isCorrect ? "正确" : "错误")}"); } Console.ReadLine(); } /// <summary> /// 校验单个答案是否正确 /// </summary> /// <param name="givenAnswer">用户提交的答案</param> /// <param name="correctAnswer">标准答案</param> /// <returns>是否正确</returns> static bool IsAnswerCorrect(string givenAnswer, string correctAnswer) { // 尝试将两个答案转换为double if (double.TryParse(givenAnswer, out double givenNum) && double.TryParse(correctAnswer, out double correctNum)) { // 数值型答案:判断是否在0.1误差范围内 return Math.Abs(givenNum - correctNum) <= 0.1; } else { // 非数值型答案(如判断题):忽略大小写比对字符串,需严格匹配可改为StringComparison.Ordinal return string.Equals(givenAnswer, correctAnswer, StringComparison.OrdinalIgnoreCase); } } }
关键细节说明
double.TryParse:C#中安全转换数值的标准方法,不会抛出异常,通过返回值判断转换是否成功,同时通过out参数输出转换后的数值- 误差范围判定:使用
Math.Abs确保正负方向的误差都被覆盖,比如正确答案22.5时,22.4和22.6都会被判定为正确 - 字符串比对:
StringComparison.OrdinalIgnoreCase可以兼容用户输入的大小写差异(如"true"匹配"True"),如果需要严格区分大小写,替换为StringComparison.Ordinal即可
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

