随机数生成循环生成相同的数字

Rob*_*idt 1 c# random for-loop

我还是C#的新手,我正在尝试构建一个简短的程序,该程序模拟将硬币掷X次的次数:

        // Declarations
        int headCount = 0;
        int tailCount = 0;

        // Main Program Logic
        Console.WriteLine("Press enter to begin");
        Console.ReadLine();
        for (int x = 1; x <= 25; x++)
        {
            Random rnd = new Random();
            int flip = rnd.Next(1, 3);
            if (flip == 1)
            {
                Console.WriteLine("Heads");
                headCount++;
            }
            else
            {
                Console.WriteLine("Tails");
                tailCount++;
            }
        }
        Console.WriteLine("Heads came up {0} times.", headCount);
        Console.WriteLine("Tails came up {0} times.", tailCount);
        if (headCount > tailCount)
        {
            Console.WriteLine("Heads wins.");
        }
        else
        {
            Console.WriteLine("Tails wins.");
        }

        // END OF DOCUMENT
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

现在,我确信自己的代码是可靠的,但是,在运行程序时遇到了问题。在上面的代码中,想法是每次执行for循环时,都会生成一个新的随机数(1或2)。实际上,十分之九,它会第一次生成一个数字,然后在其余的循环执行中使用该数字。

每个人偶尔都会有大约50/50的结果(您会从统计学上预期),但是通常相同的结果重复25次。

请注意,我在循环内声明了flip变量。我已经在循环中以及循环之前和之后来回移动了,更改似乎没有任何效果。

我是在做错什么,还是C#喜欢抛出统计异常?

JNY*_*ger 5

原因是因为您一直在打电话new Random()。相反,您应该在循环和THEN调用之外构造它.next(int,int)

 Random rnd = new Random();
 for (int x = 1; x <= 25; x++)
 {
        int flip = rnd.Next(1, 3);
        //do stuff
 }
Run Code Online (Sandbox Code Playgroud)