2013-03-27 46 views
-3

我有一个很奇怪的问题在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

这与C#有什么关系? – MyCodeSucks 2013-03-27 21:37:06

+0

.net C#相同的东西 – Jedigasm 2013-03-27 21:37:40

+4

另请参阅 - http://csharpindepth.com/Articles/Chapter12/Random.aspx – 2013-03-27 21:37:56

回答

3

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

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

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

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

+0

啊啊,谢谢你们:) – Jedigasm 2013-03-27 21:40:57