Vb.net Visual Basic-随机数
我有一些VB代码,它给我一个随机数,1在20(X)之间。然而,在20次尝试中,我将得到两次相同的数字。我怎样才能得到一个随机数序列而不重复它们?如果我点击按钮20次,我基本上希望1-20以随机顺序出现Vb.net Visual Basic-随机数,vb.net,Vb.net,我有一些VB代码,它给我一个随机数,1在20(X)之间。然而,在20次尝试中,我将得到两次相同的数字。我怎样才能得到一个随机数序列而不重复它们?如果我点击按钮20次,我基本上希望1-20以随机顺序出现 Randomize() ' Gen random value value = CInt(Int((X.Count * Rnd()))) If value = OldValue Then Do While value = OldValue
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
为此,您需要存储所有以前生成的数字,而不仅仅是一个,正如您在名为OldValue的变量中所做的那样。所以,将之前生成的所有数字存储在某个位置(列表)。并将新生成的数字与列表中的所有数字进行比较,在ur while循环中,继续生成数字,而数字不等于列表中的任何一个。对于1到20,请使用像LinkedList这样的数据结构,其中包含数字1到20。随机选择一个从1到20的索引,取该索引处的数字,然后在LinkedList的该位置弹出该数字。每个连续的迭代将选择一个索引,从1到19,pop,然后从1到18,pop,等等。直到剩下索引1到1,最后一项是最后一个随机数。很抱歉没有代码,但您应该得到它。概念是,您必须
将生成的随机数添加到列表中,并且在将其添加到列表中之前,确保新编号中没有包含。试试这个代码
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测试]将数字添加到列表中,然后按随机顺序拾取,在拾取时将其删除
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
可能重复的