【发布时间】:2023-03-31 11:56:02
【问题描述】:
这里有很多关于在函数调用之间创建相同的随机数集的答案,我真的很困惑。
有些人说,如果你给随机函数播种,你会得到不重复的数字,而恰恰相反。有人可以告诉我这是如何在 VB.Net 中完成的吗?
目标:
• 我想要种子:a
• 我在 main 中调用 rand 函数:rand(a)
• 给定 n 次对 rand 的函数调用,rand(a) 给出 随机数A,
• 运行结束
• 我再次运行 main,我希望得到相同的随机数集 一个
以下是一些想法:
Private Function Generate_Random_Number(Byval Lower as integer, Byval Upper as integer, Byval seed as integer)
Dim Random_Value as Integer
randomize(seed)
random_value = rand.next(lower, upper + 1)
Return random value
End Function
Private Sub Main()
Seed = 100
For i = 0 to 1 'run this function for two times
Get_Random_Numbers(Seed)
Next i
End Sub
Private Sub Get_Random_Numbers(Seed)
Dim x, y, w, z as integer
x = Generate_Random_Number(0,1, seed)
y = Generate_Random_Number(1,2, seed)
w = Generate_Random_Number(2,3, seed)
z = Generate_Random_Number(3,4, seed)
End Sub
假设对 Get_Random_Numbers 的第一个函数调用给我 {x = 0, y = 1, w = 2, z = 3},无论出于何种原因,对 Get_random 数字的下一次调用给我 {x = 1, y = 2, w = 3, z= 4} 这和我第一次调用这个函数时完全不同!
但我使用的是同一个种子?
谁能告诉我我做错了什么?
谢谢
【问题讨论】:
-
你必须使用相同的种子,然后你会得到相同的伪随机数(例如总是 1000)。 stackoverflow.com/questions/22712456/…
-
@Tim 他使用相同的种子,但 rand.Next 是莫名其妙的。兰特在哪里声明?
-
@Steve:他可能想知道为什么每次调用该方法时都会得到不同的数字。但是,如果他再次用相同的种子而不是相同的实例初始化
Random,他只会得到相同的数字。 编辑忘记这条评论,他使用Randomize。我以前没用过。 -
要获得您正在寻找的行为,请改用 System.Random。
-
@Steve:我认为他需要在
Randomize(seed)之后使用Rnd()。但如前所述,我对旧的 VB 函数并不熟悉。我猜 OP 有一个混合体,rand是一个Ramdom变量,它在整个应用程序中被重用。