可能重复:
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)。
为什么,我缺少什么?
答案 0 :(得分:2)
您正在每次电话上实例化Random
。这就是您获得所见结果的原因:
Dim Generator As System.Random = New System.Random()
Random
使用基于当前时间的种子生成伪随机序列(如果相同的种子,将生成相同的序列) - 如果在循环中调用,则种子中可以有0个变化,反复生成相同的值。
将实例移到函数外部,因此您只能使用生成器的单个实例。
我建议您阅读Jon Skeet关于Random的这篇文章。