1

我希望使用种子生成 1 到 26 之间的随机数,但是当我为函数提供相同的种子时,我希望得到相同的数字。

RndandRandomize函数不适合这种情况,因为它们总是返回一个完全随机的数,而不管种子如何。

4

2 回答 2

4

奇怪的是,您需要先调用 Rnd(-1),然后再调用 Randomize(n) 和 n 作为种子。

对 Rnd() 的后续调用将始终为您提供相同的序列

例如

Sub test()

    Call Rnd(-1)
    Call Randomize(0)
    For n = 1 To 10
        Debug.Print Rnd
    Next n

End Sub
于 2013-05-16T13:49:15.273 回答
1

使用System.Random类的新实例是一种可能的解决方案,并使用相同的种子初始化每个实例。

Sub Main()
    Dim yourSeed = 40 'Or whatever your seed it
    Dim random1 As New System.Random(yourSeed)
    Console.WriteLine(random1.Next(1, 26)) 'Prints 16
    Console.WriteLine(random1.Next(1, 26)) 'Prints 14
    Console.WriteLine(random1.Next(1, 26)) 'Prints 19

    Dim random2 As New System.Random(yourSeed)
    Console.WriteLine(random2.Next(1, 26)) 'Prints 16
    Console.WriteLine(random2.Next(1, 26)) 'Prints 14
    Console.WriteLine(random2.Next(1, 26)) 'Prints 19
End Sub
于 2013-05-16T13:53:09.940 回答