【问题标题】:Reset Randomize/random number generation seed in VB.NET在 VB.NET 中重置随机化/随机数生成种子
【发布时间】:2022-01-15 09:58:28
【问题描述】:

所以我正在创建一个应用程序,用户可以在其中输入种子,或者为他们随机生成种子。然后,这个种子被传递给Randomize 函数,该函数多次调用Rnd。其目的是如果使用相同的种子——无论是随机生成的,还是由用户输入的——那么随机数的输出列表应该是相同的。

我遇到的问题是,当我随机生成种子时,这会抛出随机数生成器 - 我不确定如何完全重置它。我的代码如下所示:

If UserEnteredSeed() Then
    Randomize(userSeed)
Else
    Randomize()
    userSeed = Rnd() + Rnd() ' This part is just a placeholder - but the Rnd function is called several times
End If

Randomize(userSeed)

Debug.Print(Rnd().ToString())

我的问题是,当到达Else 子句时,Rnd 函数的使用将(据我了解)遍历随机数列表,然后在使用@987654328 调用下一个Randomize 时@,列表发生变化,但列表中的位置不变。这将在未达到 Else 子句且未多次调用 Rnd 时更改输出。

我的问题是,我可以完全重置随机数生成,以便无论输入或生成userSeed 数字,相同的userSeed 生成与输出相同的随机数吗?或者如果没有,我如何才能有效地创建相同的预期行为?

【问题讨论】:

  • 你真的在使用VB.Net吗? (ToString() 暗示你是!)如果是这样,你为什么要使用旧的 Randomize()/Rnd() 函数?这些只是为了向后兼容和/或转换程序。改用较新的Random() 类...
  • 按照建议,您应该使用Random 类。只需在需要新种子时创建一个新实例。构造函数将接受一个特定种子的数字或不使用参数以使用当前时间作为种子。
  • @JackBashford,你不需要问一些你自己可以轻松测试的东西。
  • @user17922293 我的错,在另一台机器上。感谢您的帮助!

标签: .net vb.net random


【解决方案1】:

【讨论】:

  • 否定论点是否取决于我在序列中的位置?或者它将我放在序列中的哪个位置(如果你知道的话)?我刚刚对其进行了测试,它确实有效,但它把我任意地放在了序列中(所以我的问题已经解决了,只是好奇现在到底发生了什么)。
猜你喜欢
  • 2014-09-20
  • 2021-05-15
  • 2017-08-29
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 2020-02-16
  • 2013-08-23
  • 1970-01-01
相关资源
最近更新 更多