Visual Basic-随机数

时间:2013-03-28 03:50:46

标签: 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
            value = CInt(Int((X.Count * Rnd())))    
        Loop
    End If

4 个答案:

答案 0 :(得分:1)

对于1到20,使用像LinkedList这样的数据结构,其中包含数字1到20.随机选择1到20的索引,取该索引处的数字,然后弹出LinkedList的那个位置的数字。每次连续迭代将选择1到19,pop,然后1到18,pop等索引,直到你留下索引1到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进行测试]

答案 2 :(得分:0)

为此目的,您需要存储所有先前生成的数字,而不仅仅是一个,就像您在OldValue命名变量中所做的那样。所以,将所有先前生成的数字存储在某处(列表)。并将新生成的数字与列表中的所有数字进行比较,在循环中进行比较,并保持生成数字,而数字不等于列表中的任何数字..

答案 3 :(得分: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