Validate results unique random

teamdad

Member
Joined
Jun 14, 2004
Messages
12
Programming Experience
Beginner
I'm currently using the code below to create random numbers from a button click, I need something in my code to ensure that numbers are not duplicated. For example the range is 0 to 30 picking 3 numbers in 1 play. It should give results like 1-2-3 for example and not duplicate any number like 1-2-2 so on and so forth. Anyone have an example of how I can do this?
Thanking all replies in advance!!

VB.NET:
Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim minRange = 0
            Dim maxRange = 30
            Dim numsPerLine = 3
            Dim numLines = 1
            Dim i As Integer
            Dim j As Integer
            Dim results() As Integer
            Dim output As String
            ListBox3.Items.Clear()
            'Get known
            Dim known As ListBox
            known = knownValuesList
            'Array keeping the results
            ReDim PResults(numLines, numsPerLine)
            For i = 1 To numLines
                results = getNumbers(known, numsPerLine, minRange, maxRange)
                For j = 0 To results.GetUpperBound(0)
                    PResults(i - 1, j) = results(j)
                    'Can change the "0" to " " to use a space
                    Dim temp As String = IIf(CheckBox1.Checked = True, String.Format("{0:00}", results(j)), CStr(results(j)))
                    If output <> "" Then output += " - "
                    output += temp
                Next
                ListBox3.Items.Add(output)
                output = ""
            Next
End Sub
' Used to shuffle / randomize the output
    ' Use this code in any event handle to activate the shuffle
    ' ShuffleListbox(KnownValueList)
    Public Sub ShuffleListbox(ByVal lb As ListBox)
        Dim i As Integer
        Dim temp As Object
        Dim r As New Random
        Dim rndIndex As Integer
        Dim lbCount As Integer = lb.Items.Count
        lb.BeginUpdate()
        For i = 0 To lbCount - 1
            temp = lb.Items(i)
            rndIndex = r.Next(0, lbCount)
            lb.Items(i) = lb.Items(rndIndex)
            lb.Items(rndIndex) = temp
        Next
        lb.EndUpdate()
    End Sub
Public Function getNumbers(ByVal known As ListBox, ByVal requiredNumber As Integer, ByVal minRange As Integer, ByVal maxRange As Integer) As Integer()
        Dim output() As Integer
        Dim i As Integer
        Dim tmp As Integer
        Dim rndIndex As Integer
        Dim tmpArray(requiredNumber - 1) As Integer
        Dim randomPool As New ArrayList
        ' build the random pool
        For i = minRange To maxRange
            ' don't include any of the known values
            If Not known.Items.Contains(i) Then
                randomPool.Add(i)
            End If
        Next
        ' shuffle the random values
        For i = 0 To (randomPool.Count - 1)
            rndIndex = R.Next(0, randomPool.Count)
            tmp = randomPool(i)
            randomPool(i) = randomPool(rndIndex)
            randomPool(rndIndex) = tmp
        Next
        ' populate tmpArray with the known values
        ' and fill in any remaining slots
        ' with values from the shuffled randomPool
        For i = 0 To (requiredNumber - 1)
            If i <= (known.Items.Count - 1) Then
                tmpArray(i) = known.Items(i)
            Else
                tmpArray(i) = randomPool.Item(0)
                randomPool.RemoveAt(0)
            End If
        Next
        ' shuffle the set by swapping
        ' each position with another
        For i = 0 To tmpArray.GetUpperBound(0)
            rndIndex = R.Next(0, tmpArray.GetUpperBound(0))
            tmp = tmpArray(i)
            tmpArray(i) = tmpArray(rndIndex)
            tmpArray(rndIndex) = tmp
        Next
        output = tmpArray
        Return output
    End Function
 
Back
Top