【发布时间】: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 我的错,在另一台机器上。感谢您的帮助!