-2

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

1 回答 1

5

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

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

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

这里的例子:http: //www.dotnetperls.com/random

于 2013-03-27T21:37:55.513 回答