2013-03-28 52 views
1

我有一些VB代碼,讓我一個隨機數,1至20(X)。然而,20次嘗試內,我會得到相同數量的兩倍。我怎樣才能得到一個隨機數序列沒有任何人的重複?我基本上要1-20隨機順序展現出來了,如果我點擊一個按鈕,20倍。視覺Basic-隨機數

Randomize() 
    ' Gen random value 

    value = CInt(Int((X.Count * Rnd()))) 

    If value = OldValue Then 
     Do While value = OldValue 
      value = CInt(Int((X.Count * Rnd())))  
     Loop 
    End If 
+0

可能重複http://stackoverflow.com/questions/8108640/write-a-method-to-shuffle-a-deck -of卡功能於VB網) – 2013-03-28 04:25:44

回答

0

爲此目的,你需要存儲所有先前生成的數字,不只是一個,因爲ü沒有的OldValue中命名的變量。因此,將所有以前生成的數字存儲在某處(列表)。並將新生成的數字與列表中的所有列表進行比較,在ur while循環內部進行比較,並且保持生成數字,同時數字不等於列表中的任何一個。

1

對於1到20,使用數據結構鏈表,其保持數字1至20中隨機選擇1的索引 20,取數該索引處,然後在鏈表的該位置彈出的數目。直到你留下了指數1比1和最後一個項目是最後一個隨機數,每個連續迭代會選擇指數從1到19,流行,那麼1〜18,POP等。對不起,沒有代碼,但你應該得到它。

1

的概念是,你必須addgenerated random numberlist,並將其添加到list之前,請確保new number是不是在它contains。試試這個代碼,

 Dim xGenerator As System.Random = New System.Random() 
     Dim xTemp As Integer = 0 
     Dim xRndNo As New List(Of Integer) 

     While Not xRndNo.Count = 20 

      xTemp = xGenerator.Next(1, 21) 

      If xRndNo.Contains(xTemp) Then 
       Continue While 
      Else 
       xRndNo.Add(xTemp) 
      End If 

     End While 

[注:IDE測試]

0

添加號碼列表,然後接他們在一個隨機的順序,刪除他們,因爲他們挑選。

Dim prng As New Random 
Dim randno As New List(Of Integer) 

Private Sub Button1_Click(sender As Object, _ 
          e As EventArgs) Handles Button1.Click 
    If randno.Count = 0 Then 
     Debug.WriteLine("new") 
     randno = Enumerable.Range(1, 20).ToList 'add 1 to 20 to list 
    End If 
    Dim idx As Integer = prng.Next(0, randno.Count) 'pick a number 
    Debug.WriteLine(randno(idx)) 'show it 
    randno.RemoveAt(idx) 'remove it 
End Sub 
的[寫方法洗牌的卡VB.NET甲板(