0

我想生成一个小于 50 的随机数,但是一旦生成了该数字,我希望它不会再次生成。

谢谢您的帮助!

4

4 回答 4

13

请参阅:Fisher-Yates 洗牌

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;
    }
}
于 2009-08-02T04:34:01.600 回答
9

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

于 2009-08-02T04:32:12.307 回答
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
于 2009-08-03T13:59:15.887 回答
0

下面的代码生成长度为您作为参数传递的字母数字字符串。

Public Shared Function GetRandomAlphaNumericString(ByVal intStringLength As Integer) As String

Dim chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

Dim intLength As Integer = intStringLength - 1

Dim stringChars = New Char(intLength) {}

Dim random = New Random()

    For i As Integer = 0 To stringChars.Length - 1
        stringChars(i) = chars(random.[Next](chars.Length))
    Next

    Dim finalString = New [String](stringChars)
    Return finalString
End Function
于 2012-10-15T13:50:04.420 回答