Random Number but Don't Repeat
I would like to generate a random number less than 50, but once that number has been generated I would like it so that it cannot be generated again.
Thanks for the help!
Please see: Fisher–Yates shuffle:
public static void shuffle (int[] array)
{
Random rng = new Random(); // i.e., java.util.Random.
int n = array.length; // The number of items left to shuffle (loop invariant).
while (n > 1)
{
n--; // n is now the last pertinent index
int k = rng.nextInt(n + 1); // 0 <= k <= n.
int tmp = array[k];
array[k] = array[n];
array[n] = tmp;
}
}
Put the numbers 1-49 in a sortable collection, then sort it in random order; pop each one out of the collection as needed.
Seeing as the question was tagged VB/VB.Net... this is a VB implementation of Mitch's answer.
Public Class Utils
Public Shared Sub ShuffleArray(ByVal items() As Integer)
Dim ptr As Integer
Dim alt As Integer
Dim tmp As Integer
Dim rnd As New Random()
ptr = items.Length
Do While ptr > 1
ptr -= 1
alt = rnd.Next(ptr - 1)
tmp = items(alt)
items(alt) = items(ptr)
items(ptr) = tmp
Loop
End Sub
End Class