C#彩票游戏:两组6位随机数生成功能实现问题
解决彩票游戏生成两组6位随机数的问题
以下是修改后的完整代码,实现生成两组Lotto号码的功能,同时修复了潜在的随机数重复和输入崩溃问题:
using System; class LotteryGame { // 静态Random实例,避免短时间多次创建导致随机数重复 private static readonly Random _random = new Random(); static void Main(string[] args) { int choice = 0; do { DisplayMenu(); if (int.TryParse(Console.ReadLine(), out choice)) { switch (choice) { case 1: LottoDraw(); break; case 2: EuroDraw(); break; default: Console.WriteLine("请输入1选择Lotto,输入2选择EuroMillions"); break; } } else { Console.WriteLine("输入无效,请输入数字1或2"); choice = 0; // 重置选项,继续循环 } } while (choice != 2); } // 显示菜单的方法(原代码未实现,补充完整) private static void DisplayMenu() { Console.WriteLine("=== 彩票游戏菜单 ==="); Console.WriteLine("1. 生成Lotto号码"); Console.WriteLine("2. 生成EuroMillions号码"); Console.WriteLine("请输入选择:"); } public static void LottoDraw() { // 生成两组号码 int[] line1 = GenerateLottoLine(); int[] line2 = GenerateLottoLine(); // 输出第一组 Console.WriteLine("第一组Lotto号码:"); foreach (int num in line1) { Console.Write($"{num} "); } Console.WriteLine(); // 输出第二组 Console.WriteLine("第二组Lotto号码:"); foreach (int num in line2) { Console.Write($"{num} "); } Console.WriteLine(); Console.ReadLine(); } // 辅助方法:生成一组排序后的6位Lotto号码 private static int[] GenerateLottoLine() { int[] line = new int[6]; for (int i = 0; i < line.Length; i++) { line[i] = _random.Next(1, 47); } Array.Sort(line); return line; } // 原代码中的EuroDraw方法保留占位 public static void EuroDraw() { Console.WriteLine("EuroMillions号码生成功能待实现"); Console.ReadLine(); } }
关键修改说明
- 代码复用:新增
GenerateLottoLine辅助方法,单独负责生成单组排序后的彩票号码,生成两组时直接调用两次,避免重复编写生成逻辑,降低出错概率。 - 修复随机数重复问题:将
Random实例设为类的静态成员,避免短时间内多次创建Random导致的随机序列重复(连续创建Random会使用相同的系统时间种子,生成完全相同的数字)。 - 增强输入健壮性:替换
int.Parse为int.TryParse,处理用户非数字输入的情况,避免程序直接崩溃。 - 优化输出展示:明确标注两组号码,用
foreach简化输出代码,让结果更清晰易读。
内容的提问来源于stack exchange,提问作者DKITStudent
相关产品推荐
相关产品推荐

