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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:15:37