You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.");
}

关键修改说明

  1. 修正过滤逻辑:当输入数不在0-100范围时,提示用户并跳过添加步骤,只保留符合范围的数。
  2. 添加重复值校验:通过valueList.Contains(listInput)判断数是否已存在,确保列表中始终存储唯一值。
  3. 优化输入处理:用int.TryParse替代Convert.ToInt32,避免非整数输入导致的程序崩溃。
  4. 简化循环条件:由于列表中仅存储唯一值,直接用valueList.Count != targetUniqueCount作为循环终止条件,无需额外计算去重数量,更高效。
  5. 增强用户提示:针对无效输入、范围错误、重复值等场景给出明确提示,提升交互体验。

内容的提问来源于stack exchange,提问作者charlie93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:36:33