2013-03-28 18 views
1

У меня есть код VB, который дает мне случайное число, 1 между 20 (X). Однако в течение 20 попыток я получу тот же номер дважды. Как я могу получить последовательность случайных чисел, без каких-либо повторений? В основном я хочу, чтобы 1-20 отображался в случайном порядке, если я нажму кнопку 20 раз.Visual 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

возможно дубликат [Написать способ перетасовать колоду карт в VB.NET] (http://stackoverflow.com/questions/8108640/write-a-method-to-shuffle-a-deck -Из-карты-в-VB-нетто) –

ответ

0

для этой цели, вам нужно хранить все предыдущие сгенерированное число, а не только один, так как у сделал в OldValue с именем переменной. поэтому сохраните все ранее сгенерированные числа где-нибудь (список). и сравните вновь сгенерированное число со всеми в списке, внутри ур во время цикла и продолжайте генерировать числа, а число не равно ни одному из списка.

1

В целях от 1 до 20 используйте структуру данных, например, LinkedList, который содержит числа от 1 до 20. Выберите индекс от 1 до 20 в случайном порядке, возьмите номер в этом индексе, затем вытащите номер в этом месте LinkedList. Каждая последующая итерация будет выбирать индекс от 1 до 19, pop, затем от 1 до 18, pop и т. Д., Пока вы не останетесь с индексом 1 до 1, а последний элемент будет последним случайным числом. Извините за отсутствие кода, но вы должны его получить.

1

Концепция, вы должны addgenerated random number в list, и перед добавлением его в 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 
Смежные вопросы