我在vb.net中有一个非常奇怪的问题,由于某种原因,system.random()在我的任何函数中都不是随机的:
Public Function RandomNumber(ByVal MaxNumber As Integer, Optional ByVal MinNumber As Integer = 0) As Integer
Dim R As System.Random = New System.Random()
If MinNumber > MaxNumber Then
Dim T As Integer = MinNumber
MinNumber = MaxNumber
MaxNumber = T
End If
Return R.Next(MinNumber, MaxNumber)
End Function
这是完全调用9次之后的结果
4
4
4
3
3
3
3
3
3
答案 0 :(得分:4)
这是因为Random的实现方式。最简单的解决方法是在类级别声明以下行,而不是在函数内。
Dim R As System.Random = New System.Random()
Random类使用time作为种子。你这样做的方式每秒多次声明一个新的Random,很有可能,因此Random.Next不知道之前已经创建了一个“随机”数字。如果你在类级别声明它,它将存在于funciton调用范围之外,并且“知道”它已经生成了一个数字,并且能够生成不同的数字。