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
相关产品推荐
相关产品推荐

