随机函数重复返回相同的数字

时间:2013-03-27 21:36:13

标签: .net vb.net random

我在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

1 个答案:

答案 0 :(得分:4)

这是因为Random的实现方式。最简单的解决方法是在类级别声明以下行,而不是在函数内。

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

Random类使用time作为种子。你这样做的方式每秒多次声明一个新的Random,很有可能,因此Random.Next不知道之前已经创建了一个“随机”数字。如果你在类级别声明它,它将存在于funciton调用范围之外,并且“知道”它已经生成了一个数字,并且能够生成不同的数字。

此处示例:http://www.dotnetperls.com/random