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

