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
'