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

C#中基于用户输入的Do While循环实现问题(彩票场景)

彩票号码生成代码的死循环修复及优化

死循环原因

你写的while (euroLines <= euroLines)条件永远成立,因为变量euroLines的值自始至终没变化,自然会无限循环。要解决这个问题,需要新增一个计数器变量来记录已经生成的号码组数,用它来控制循环次数。

额外优化点

另外你把Random对象放在do-while循环内部,会导致循环执行过快时,多组号码完全重复(因为Random默认用系统当前时间做种子,短时间内实例化的Random种子相同),所以要把Random实例移到循环外面。

修正后的完整代码

public static void EuroDraw()
{
    Console.WriteLine("How many lines do you wish to purchase (minimum 1):");
    int euroLines = int.Parse(Console.ReadLine());
    // 新增计数器,记录已生成的组数
    int currentLine = 0;
    // 把Random移到循环外,避免重复种子导致的重复号码
    Random euroNumbers = new Random();

    do
    {   
        int[] euroMillions = new int[5];

        for (int i = 0; i < euroMillions.Length; i++)
        {
            euroMillions[i] = euroNumbers.Next(1, 50);
        }
        Array.Sort(euroMillions);

        // 打印时加上组号,更清晰区分不同组
        Console.WriteLine($"Your Euro Millions Line {currentLine + 1}:");
        for (int i = 0; i < euroMillions.Length; i++)
            Console.Write($"{euroMillions[i]} ");
        Console.WriteLine(); // 换行分隔每组号码

        // 计数器自增,推进循环进度
        currentLine++;
    } while (currentLine < euroLines); // 条件改为计数器小于总组数,达到指定数量后退出循环
    Console.ReadLine();
}

关键修改说明

  • 新增currentLine计数器,每次循环结束后自增,循环条件变为currentLine < euroLines,生成指定组数后自动退出循环
  • 将Random实例移到循环外部,确保每组号码的随机性不重复
  • 新增组号打印,让输出更易区分不同组的号码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:45:54