.net 随机不那么随机-取决于之前的通话
可能重复:.net 随机不那么随机-取决于之前的通话,.net,vb.net,random,.net,Vb.net,Random,可能重复: 在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函数,该函数如下
在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函数,该函数如下(简化):
然后我有了这个
For i As Integer = 1 to 10000
GetRandomPerson()
Next
我的问题是,似乎存在对GetRandom调用的依赖性,似乎如果性别为1,Zip将永远不会高于某个值(约5000),如果性别为2,Zip将始终高于某个值(约5000)
为什么会这样,我遗漏了什么?您在每次调用中都实例化了
随机
。这就是为什么您会看到这样的结果:
Dim Generator As System.Random = New System.Random()
Random
使用基于当前时间的种子生成伪随机序列(如果具有相同的种子,则将生成相同的序列)-如果像您这样在循环中调用,则种子中可能会有0个更改,反复生成相同的值
将实例移到函数之外,以便只使用生成器的单个实例
我建议阅读Jon Skeet关于的这篇文章。将
Dim生成器作为System.Random=New System.Random()从function@J.Steen在阅读了另一个答案后,我同意,它给了我解决方案/我应该删除我的问题吗?@Muleskinner如果你觉得它对stackoverflow社区没有贡献,删除它。如果您觉得有非常宝贵的额外信息,请不要删除它。=)
Dim Generator As System.Random = New System.Random()