vb 随便率性随机数介绍[学习]
VB 任意随机数介绍
'思路
Randomize '初始化随机数生成器
Print Int(Rnd() * 2) '生成随机数范围是0-1
'如果要生成1-10之间的随机数:
'可以看作随机数的的起始数是:1,范围是1+(0~9) 'Int(Rnd() * 10) 生成0-9之间的数,再加上起始数1,所以
Print Int(Rnd() * 10) +1
'如果要生成10,30之间的随机数: '可以看作随机数的起始数是:10,范围是10+(0~20)
'int(Rnd() * 21)生成0-20之间的随机数,再加上起始数10,所以
Print Int(Rnd() * 20+1) +10
'如果要生成N,M之间的随机数
'可以看作随机数的起始数是:N,范围是10+(0~M-N)
'int(Rnd() * (M-N+1))生成0-(M-N)之间的随机数,再加上起始数N,所以
Print Int(Rnd() * (M-N+1)) +N
函数正文:
'----------------------------------------------------------
----------------------------
'任意随机数(N-M)的函数(单取、多取存入数组、排序等功能)
'----------------------------------------------2008-4-11
'-----------------------------------by 鞠勇鸿
'对于本函数有改进意见,如果您方便请发邮件致:jyh_jack@163.com
'----------------------------------------------------------
----------------------------
Function getRnd(N, M As Integer) As Integer '取N-M之间的随
机数,M>=N
getRnd = Int(Rnd() * (M - N + 1)) + N
End Function
Function getArrRndNR(Counter As Integer, N, M As Integer) As
Integer() '取Counter个N-M之间的随机数(不重复)
If (Counter > (M - N + 1)) Then
MsgBox "随机数设置不正确"
Exit Function
End If
ReDim arr(1 To Counter) As Integer
i = 0
Do While i < Counter
arr(i + 1) = getRnd(N, M)
found = False
For X = 1 To i
If arr(X) = arr(i + 1) Then
found = True
Exit For
End If
Next
If Not found Then
i = i + 1
End If
Loop
getArrRndNR = arr
End Function
Function getArrRnd(Counter As Integer, N, M As Integer) As
Integer() '取Counter个N-M之间的随机数(可重复)
If (Counter > (M - N + 1)) Then
MsgBox "随机数设置不正确"
Exit Function
End If
ReDim arr(1 To Counter) As Integer
For i = 1 To Counter
arr(i) = getRnd(N, M)
Next
getArrRnd = arr
End Function
Sub OrderNumberD(arr) '从大到小排序
For i = LBound(arr) To UBound(arr)
For j = LBound(arr) To UBound(arr)
If arr(i) > arr(j) Then
X = arr(i)
arr(i) = arr(j)
arr(j) = X
End If
Next
Next
End Sub
Sub OrderNumberA(arr) '从小到大排序
For i = LBound(arr) To UBound(arr)
For j = LBound(arr) To UBound(arr)
If arr(i) < arr(j) Then
X = arr(i)
arr(i) = arr(j)
arr(j) = X
End If
Next
Next
End Sub
'----------------------------------------------------------
---------------------------- '---------------------------------------函数结束--------------------------------------- '----------------------------------------------------------
----------------------------
测试:
'测试
Private Sub Command1_Click()
Randomize '一定要初始化随机数,否则每次打开程序取出的数都一样的。
MsgBox getRnd(1, 12), vbOKOnly, "1-12之间任取一数"
arr = getArrRndNR(10, 11, 33) '取10个11-33之间不重复的随机数,存入数组arr,取重复的可以用getArrRnd函数 OrderNumberA arr '升序排列数组arr ,降序排列为OrderNumberD
For i = 1 To UBound(arr) '显示
Print arr(i)
Next
End Sub