随机数但不要重复

0 vb.net shuffle

我想生成一个小于50的随机数,但是一旦生成了这个数字,我希望它能够再次生成.

谢谢您的帮助!

Mit*_*eat 13

请参阅: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;
    }
}
Run Code Online (Sandbox Code Playgroud)


onu*_*ade 9

将数字1-49放入可排序的集合中,然后按随机顺序对其进行排序; 根据需要从集合中弹出每个.


Bil*_*ill 5

看到这个问题被标记为VB/VB.Net ......这是Mitch回答的VB实现.

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
Run Code Online (Sandbox Code Playgroud)