我将在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
答案 0 :(得分:1)
我从未听说过或读过Random
类是基于计时器的。您可能已经听说系统时间播种,但之后对Next
的每次调用都会返回一个通常与之前不同的随机数。通常情况下,当您看到来自Random
的非随机数据时,因为您通过循环在每次迭代中创建新的随机数,就像您在共享的代码中一样。由于每个都是从系统时钟播种的,并且您可以非常快速地创建几个,因此您会看到重复的模式。在循环外创建Random
以解决此问题。
答案 1 :(得分:0)
它等于系统时钟的刷新率,因为它将时间用作种子。但是对于你的工作,你应该将Random实例保持在循环之外。
xx := case a
when 'x' then 'b'
when 'y' then 'c'
else 'z'
end;
xx := case
when a='x' then 'b'
when a='y' then 'c'
else 'z'
end;
由于它使用时间作为种子,因此只使用时间作为种子,即使您同时多次调用它,也会生成随机数,只要您使用相同的实例。