【发布时间】:2012-01-08 16:17:41
【问题描述】:
可能重复:
Why does it appear that my random number generator isn't random in C#?
How can I generate truly (not pseudo) random numbers with C#?
我创建了一个骰子游戏,骰子基于百分位数 1-100。
public static void Roll()
{
Random rand = new Random((int)DateTime.Now.Ticks);
return rand.Next(1, 100);
}
但我不觉得这是基于当前时间的真正随机。
如果我这样做了
for (int i = 0; i < 5; i++)
{
Console.WriteLine("#" + i + " " + Roll());
}
它们都是相同的值,因为 DateTime.Now.Ticks 没有改变,它播种了相同的数字。
我想如果种子由于当前时间相同,我可以生成一个新的随机种子,但感觉不像是诚实的“重新滚动”
我应该怎么做才能尝试复制接近真实/诚实的掷骰子?我应该改用RNGCryptoServiceProvider 类来生成卷吗?
【问题讨论】:
-
关于这个问题有很多变体。这是其中之一……Why does it appear that my random number generator isn't random in C#?……标记为骗子。 (您的 Random 应该只有一个静态实例,而不是每个 Roll 都有一个新的 Random)
-
在引用代码时,通常最好复制粘贴。我假设您必须重新输入,因为您无法从
void函数中返回值,但Roll被声明为public static void Roll()。 -
@rapsalands:真正的随机将是一个真正的随机序列。
Random不会为 OP 这样做,我已经在我的回答中指出了这一点。 :-) -
@spender:除了 OP 说他想要一个 true 随机数。现在,他可能不会,他可能只是在问
Random的问题,但是...... :-)