1

可能重复:
随机数生成器仅生成一个随机数

在 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)。

为什么会这样,我错过了什么?

4

1 回答 1

2

您正在实例化Random每个调用。这就是为什么你会得到你所看到的结果:

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

Random使用基于当前时间的种子来生成伪随机序列(如果具有相同的种子,将生成相同的序列) - 如果像你一样在循环中调用,种子中可能会有 0 变化,生成一遍又一遍的相同值。

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

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

于 2012-11-16T12:25:59.757 回答