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

C#编写彩票模拟程序出现while死循环问题应如何解决?

C#彩票模拟代码问题排查与修复

问题原因

  • 随机号码仅生成一次:3个开奖号码的生成逻辑放在了循环外部,程序启动时只会生成1组固定的随机号码,若首次生成的号码与用户输入不匹配,后续循环永远不会生成新号码,直接导致无限死循环。
  • 嵌套do-while逻辑错误:内层do-while无实际作用,进入后会直接执行打印语句并break退出内层循环,完全不符合「匹配成功才输出结果」的需求。
  • 类型使用不规范(非死循环直接原因):彩票号码为1-30的整数,使用double类型接收用户输入没有必要,改用int类型更合理,也能避免隐式类型转换可能引发的额外问题。

修正后可运行代码

using System;

namespace challenges
{
    class Program
    {
        static void Main(string[] args)
        {
            // 彩票问题
            int num1, num2, num3;
            int week = 0;

            Console.Write("输入第一个号码:");
            num1 = Convert.ToInt32(Console.ReadLine());
            Console.Write("输入第二个号码:");
            num2 = Convert.ToInt32(Console.ReadLine());
            Console.Write("输入第三个号码:");
            num3 = Convert.ToInt32(Console.ReadLine());

            Random rnd = new Random();
            bool isWin = false;

            do
            {
                week++;
                // 每周开奖生成新的随机号码
                int ball1 = rnd.Next(1, 31);
                int ball2 = rnd.Next(1, 31);
                int ball3 = rnd.Next(1, 31);

                if (ball1 == num1 && ball2 == num2 && ball3 == num3)
                {
                    isWin = true;
                    Console.WriteLine($"中头奖一共花了 {week} 周");
                }
            } while (!isWin);
        }
    }
}

补充说明

该玩法头奖中奖概率为1/27000,程序运行时可能需要遍历数千到数万次才会输出结果,属于正常情况,并非程序卡顿。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:48:04