2013-03-27 75 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