随机不是那么随机 - 依赖于以前的呼叫所以它似乎

时间:2012-11-16 12:22:32

标签: .net vb.net random

  

可能重复:
  Random number generator only generating one random number

在vb.net中我使用此函数来获取随机数:

  Private Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
    Dim Generator As System.Random = New System.Random()
    Return Generator.Next(Min, Max)
  End Function

我从另一个看起来像这个(简化)的函数调用GetRandom函数几次:

Public Sub GetRandomPerson() 
  Dim Gender as integer
  Dim Zip as integer

  Gender = GetRandom(1,3)
  Zip = GetRandom(10000, 99999)

  ' Here I save the random person to DB
End Sub

然后我有了这个

For i As Integer = 1 to 10000
  GetRandomPerson()
Next

我的问题是似乎依赖于对GetRandom的调用,似乎如果Gender为1则Zip永远不会高于某个值(大约5000),如果Gender为2,则Zip将始终更高超过一定值(约5000)。

为什么,我缺少什么?

1 个答案:

答案 0 :(得分:2)

您正在每次电话上实例化Random。这就是您获得所见结果的原因:

Dim Generator As System.Random = New System.Random()

Random使用基于当前时间的种子生成伪随机序列(如果相同的种子,将生成相同的序列) - 如果在循环中调用,则种子中可以有0个变化,反复生成相同的值。

将实例移到函数外部,因此您只能使用生成器的单个实例。

我建议您阅读Jon Skeet关于Random的这篇文章。