【问题标题】:Visual Basic random number with seed but in reverse带有种子但反向的 Visual Basic 随机数
【发布时间】:2013-05-11 10:47:06
【问题描述】:

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

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

【问题讨论】:

  • “Rnd 和 Randomize 函数不适合这种情况,因为它们总是返回一个完全随机的数字,而不管种子是什么。”在这点上我不得不不同意你的看法。向我们展示您的代码...
  • @Idle_Mind,我已经通过Bathsheba的回答完成了我想要的,但感谢您的关注

标签: vb.net random random-seed


【解决方案1】:

奇怪的是,您需要先调用 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

【讨论】:

  • 值得注意的是,这些函数是旧的 VB6 函数,仍然支持主要是为了向后兼容。相反,新的 .NET 代码应该使用 Random 类。 +1,但是,根据要求使用旧功能提供答案:)
【解决方案2】:

使用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

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 2011-04-04
    • 1970-01-01
    • 2011-09-06
    • 2019-06-02
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多