【问题标题】:What is the refresh rate of the random() method in C# [duplicate]C#中random()方法的刷新率是多少[重复]
【发布时间】:2015-12-21 20:51:18
【问题描述】:

我将在 for 循环中生成 100 个随机数。唯一的问题是,由于 random() 方法是基于计时器的,它会连续生成 3-4 次相同的数字。 我可以通过在我的循环中包含一个threat.sleep() 方法来解决这个问题。因此,我想知道 random() 方法的确切刷新率,以便我可以匹配threat.sleep() 方法并且不会被不必要地延迟。

这是我的代码:

for (int i; i <= 100; i += 1)
{        
    Random rndNum = new Random();
    Console.WriteLine(rndNum.Next(1, 100));
    Thread.Sleep(X); //I want to know the best value of X (as less delay as possible) 
}

非常感谢

/HamMan4Ever

【问题讨论】:

  • 不要在每次迭代中生成new Random()。在循环之前生成new Random(),并在整个循环中重复使用。

标签: c# random refresh


【解决方案1】:

我从未听说或读过Random 类是基于计时器的。您可能听说它在系统时间之前播种,但之后每次调用Next 都会返回一个随机数,通常与之前的不同。通常,当您看到来自Random 的非随机数据时,这是因为您正在通过循环在每次迭代中创建一个新的随机数据,就像您在共享的代码中一样。由于每个都是从系统时钟播种的,并且您正在非常快速地创建几个,因此您会看到重复的模式。在循环外创建您的Random 以消除此问题。

【讨论】:

    【解决方案2】:

    它等于系统时钟的刷新率,因为它使用时间作为种子。但是对于您的工作,您应该将 Random 实例保留在循环之外。

    Random rndNum = new Random();
    for (int i; i <= 100; i += 1)
    {        
        Console.WriteLine(rndNum.Next(1, 100));
    }
    

    由于它使用时间作为种子,它只使用它,并且即使您同时多次调用它也会生成随机数,只要您使用相同的实例。

    【讨论】:

    • 说刷新率与系统时钟匹配是一种误导,并且会导致 OP 错误地认为在调用 Random 类的方法时存在刷新率之类的东西。没有。
    • 虽然没有刷新率,因为它使用系统时间,所以刷新率会与更新时间的频率相匹配。
    • 我不确定我们对刷新率的定义是否相同。
    猜你喜欢
    • 2019-10-10
    • 2015-03-31
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多