如何使用randomize和rnd获取随机变量的重复列表?
通过重复列表,我的意思是如果你运行一个循环来获得10个随机数,列表中的每个随机数都是唯一的.此外,如果您再次运行此序列,您将获得与以前相同的10个随机数.
pax*_*blo 14
来自微软自己的口:
要重复随机数序列,请在使用带有数字参数的Randomize之前立即使用否定参数调用Rnd.
详情请见此处.
整个部分:
备注
该Rnd函数返回小于1但大于或等于零的值.
number的值决定了Rnd生成随机数的方式:
对于任何给定的初始种子,产生相同数目的序列,因为对每一个连续的呼叫Rnd功能使用以前的数作为该序列中的下一个号码的种子.
在调用之前Rnd,使用Randomize不带参数的语句使用基于系统计时器的种子初始化随机数生成器.
要在给定范围内生成随机整数,请使用以下公式:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
Run Code Online (Sandbox Code Playgroud)
这里,upperbound是范围中的最大数字,lowerbound是范围中的最小数字.
注意要重复随机数序列,请在使用Randomize数字参数之前立即使用否定参数调用Rnd.使用具有相同数字值的Randomize不会重复前一个序列.
举例来说,如果将此代码放入Excel中,则每次运行时都会生成不同的数字:
Sub xx()
' x = Rnd(-1) '
Randomize 10
MsgBox (Rnd)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,如果取消注释该x = Rnd(-1)行,则会在每次运行时生成相同的数字.
请注意,您必须做两件事.调用Rnd带负参数,并调用Randomize具有特定参数.改变这些东西会给你一个不同的种子(因此序列).
编辑:
你的评论:
通过重复序列,我的意思是如果你运行一个循环来获得10个随机数,列表中的每个随机数都是唯一的.此外,如果您再次运行此序列,您将获得与以前相同的10个随机数.我所描述的是否有意义?
您现在需要一条信息.你要求的不是随机数而是随机数.我将把你先前的答案,我就如何做到这一点在这里.您需要做的就是将洗牌算法与上面详述的种子设置相结合,您将拥有可重复的,独特的序列.
这里有一些代码可以显示它的实际效果.这个子程序的每次运行都会返回序列,4 1 5 6 2 3 7 10 9 8所以我认为这就是你所追求的,一个可重复的,"随机的",独特的序列.如果您希望能够生成不同的序列(但仍以可重复的方式),则只需更改给定的值即可Randomize.
Option Explicit
Option Base 1
Sub xx()
Dim x(10) As Integer
Dim xc As Integer
Dim xp As Integer
Dim i As Integer
Dim s As String
For i = 1 To 10
x(i) = i
Next
xc = 10
i = Rnd(-1)
Randomize 1
s = "Values:"
For i = 1 To 10
xp = Int(Rnd * xc) + 1
s = s & " " & CStr(x(xp))
x(xp) = x(xc)
xc = xc - 1
Next i
MsgBox (s)
End Sub
Run Code Online (Sandbox Code Playgroud)