How to generate 7 random numbers out of 33 (1-33) in VB.NET

1 Answer

0 votes
Imports System

Module Program

    ''' <summary>
    ''' Generates a specified number of unique random numbers
    ''' from the range 1..maxNumber.
    ''' </summary>
    ''' <param name="count">Number of values to generate.</param>
    ''' <param name="maxNumber">Maximum value in the range.</param>
    ''' <returns>An array of unique random numbers.</returns>
    Public Function GenerateRandomNumbers(count As Integer,
                                          maxNumber As Integer) As Integer()

        If count > maxNumber Then
            Throw New ArgumentException(
                "count cannot be greater than maxNumber.")
        End If

        ' Create an array containing 1..maxNumber
        Dim numbers(maxNumber - 1) As Integer

        For i As Integer = 0 To maxNumber - 1
            numbers(i) = i + 1
        Next

        ' Use a single Random instance
        Dim rng As New Random()

        ' Fisher-Yates shuffle
        For i As Integer = numbers.Length - 1 To 1 Step -1
            Dim j As Integer = rng.Next(i + 1)

            Dim temp As Integer = numbers(i)
            numbers(i) = numbers(j)
            numbers(j) = temp
        Next

        ' Copy the first "count" numbers
        Dim result(count - 1) As Integer
        Array.Copy(numbers, result, count)

        Return result

    End Function

    Sub Main()

        Dim picks() As Integer = GenerateRandomNumbers(7, 33)

        ' Optional
        Array.Sort(picks)

        Console.WriteLine("Random numbers:")
        
        For Each number As Integer In picks
            Console.Write(number & " ")
        Next

        Console.WriteLine()

    End Sub

End Module


' run:
'
' Random numbers:
' 2 3 4 7 8 11 27 
'

 



answered Oct 27 by avibootz
edited Oct 28 by avibootz
...