调用从循环内部返回随机数的方法[重复]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

我有一个'for'循环,该循环调用一个方法,该方法返回1到10之间的一个随机数。然后该循环将该数字写入控制台。当我正常运行代码时,它总是返回相同的数字。但是,当我使用调试工具单步执行代码时,一切似乎都可以正常工作。该方法在每个循环周期返回一个不同的随机数。这是怎么回事?

   for(int i = 0; i < 5; i++)
        {
            int r = RandomNumber();
            Console.WriteLine(r);
        }

   static int RandomNumber()
        {
            Random rand = new Random();
            int x = rand.Next(1, 11);
            return x;
        }
c# loops random
1个回答
0
投票

您应在应用程序开始运行时仅创建一次“新的随机”对象。

[每次在循环中创建一个新名称都会减少随机的数字顺序-包括您所看到的完全相同的数字,就像微软自己的文档所说的一样:

https://docs.microsoft.com/en-us/dotnet/api/system.random.-ctor?view=netframework-4.8

因为前两个随机对象是紧密连续创建的,所以它们会基于系统时钟使用相同的种子值实例化,因此它们会产生相同的随机数序列。

当您逐步使用调试器时,您花费了数秒钟的时间,因此将使用不同的种子来创建随机的不同实例。

© www.soinside.com 2019 - 2024. All rights reserved.