Random Number but Don't Repeat

亡梦爱人 提交于 2019-12-17 10:06:42

问题


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!


回答1:


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;
    }
}



回答2:


Put the numbers 1-49 in a sortable collection, then sort it in random order; pop each one out of the collection as needed.




回答3:


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



回答4:


Below code generate alpha-numeric string with length that you pass as parameter.

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


来源:https://stackoverflow.com/questions/1218155/random-number-but-dont-repeat

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!