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

C#随机数生成器重复生成相同数值问题求助

解决猜数字游戏重玩时随机数重复的问题

问题根源在于你只在程序启动时生成了一次随机数speltal,重玩游戏时并没有重新生成新的随机数,所以每次重玩都会使用同一个数字。

修复步骤

  • 将随机数生成逻辑移到while循环内部,确保每一轮游戏(包括重玩)都能生成新的随机数;
  • 保留唯一的Random实例,避免短时间内多次实例化导致的随机数重复问题(系统时钟精度限制)。

修改后的完整代码

static void Main(string[] args)
{
    // 声明变量
    int min = 1;
    int max = 20; 
    Random slumpat = new Random(); // 创建随机数实例
    bool spela = true; // 控制游戏循环的变量
    string igen = "";

    while (spela) 
    {
        // 每轮游戏开始时生成新的随机数
        int speltal = slumpat.Next(min, max);
        int rättTal = speltal;
        int check = 0;

        Console.Write("\n\tGissa på ett tal mellan 1 och 20: ");

        Int32.TryParse(Console.ReadLine(), out int tal);

        if (tal < speltal)
        {
            Console.WriteLine("\tDet inmatade talet " + tal + " är för litet, försök igen.");
        }

        if (tal > speltal)
        {
            Console.WriteLine("\tDet inmatade talet " + tal + " är för stort, försök igen.");
        }

        if (tal == speltal)
        {
            Console.WriteLine("\tGrattis, du gissade rätt! Tryck på valfri knapp för att fortsätta.");
            Console.ReadLine();
            Console.Clear();
            check = 1;
        }

        if (check == 1)
        {
            Console.WriteLine("\tVill du spela igen? (j/n): ");
            igen = Console.ReadLine();
            Console.Clear();

            if (igen == "n")
            {
                break;
            }
            // 输入"j"时直接进入下一轮循环,自动生成新随机数
        }
    }
}

额外说明

  • 无需每次重玩都重新创建Random对象,单个实例多次调用Next方法就能生成足够随机的序列;
  • 移除了冗余的continue语句,输入"j"时循环会自动进入下一次迭代,自然触发新随机数的生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:20:42