C#代码问题:输入5个唯一整数后循环无法终止的排查
问题分析与修复方案
原代码存在的核心问题
- 过滤条件逻辑颠倒:原代码中
if (ListInput < 0 || ListInput > 100)的逻辑是只添加超出0-100范围的数,完全违背了“过滤小于0或大于100的数”的需求。 - 未校验重复值:没有判断输入的数是否已存在于列表中,导致重复值被不断加入,
distinctCount无法正确统计唯一数的数量,循环无法在达到5个唯一数时终止。 - 缺少输入异常处理:用户输入非整数内容时,
Convert.ToInt32会直接抛出异常,导致程序崩溃。
修复后的代码
public void UniqueNumbers() { List<int> valueList = new List<int>(); int listInput; const int targetUniqueCount = 5; while (valueList.Count != targetUniqueCount) { Console.WriteLine("Please enter an integer value: "); string? input = Console.ReadLine(); // 处理非整数输入 if (!int.TryParse(input, out listInput)) { Console.WriteLine("Invalid input! Please enter a valid integer."); continue; } // 过滤0-100范围外的数 if (listInput < 0 || listInput > 100) { Console.WriteLine("Input out of range! Please enter a number between 0 and 100."); continue; } // 检查是否已存在,避免重复 if (valueList.Contains(listInput)) { Console.WriteLine("This number has already been entered! Please enter a unique number."); continue; } // 符合所有条件,添加到列表 valueList.Add(listInput); Console.WriteLine($"Number added successfully! Current unique count: {valueList.Count}"); } Console.WriteLine("You have entered 5 unique valid numbers. Loop terminated."); }
关键修改说明
- 修正过滤逻辑:当输入数不在0-100范围时,提示用户并跳过添加步骤,只保留符合范围的数。
- 添加重复值校验:通过
valueList.Contains(listInput)判断数是否已存在,确保列表中始终存储唯一值。 - 优化输入处理:用
int.TryParse替代Convert.ToInt32,避免非整数输入导致的程序崩溃。 - 简化循环条件:由于列表中仅存储唯一值,直接用
valueList.Count != targetUniqueCount作为循环终止条件,无需额外计算去重数量,更高效。 - 增强用户提示:针对无效输入、范围错误、重复值等场景给出明确提示,提升交互体验。
内容的提问来源于stack exchange,提问作者charlie93
相关产品推荐
相关产品推荐

