标题: 用vbs写了一段代码,请高手指教 [打印本页] 作者: gdutlzl 时间: 2010-6-29 14:44 标题: 用vbs写了一段代码,请高手指教 这段代码是为了产生6个不重复的随机数:
Dim i,m,A(6)
Randomize
Do until Response=vbNo
For i=1 to 6
Function Unduplicated(Myvalue,m)
Dim j
For j= 0 to m
if Myvalue=A(j) then
(我想将主函数中的字符数组A在这里用一下,感觉肯定用错了,但不知道正确的应该数怎么样的)
Do until Myvalue<>A(j)
Myvalue=(int(Rnd*20)+1) ‘重复的再重新产生随机数
Call Unduplicated(Myvalue,m) ‘递归检测前面已经产生的随机数是否和新产生的随机数重复
Loop
End if
Next
End Function
这里面还有其他的错误请帮忙指出来,谢谢!作者: skyzhu 时间: 2010-6-29 17:33
'递归最好是少用,给个参考的
'随机数函数(最大随机整数范围,总个数)
Function CreateRandomNum(MaxNumarea,Count)
Dim Num(999)
Dim i,j,n,tmp
Randomize
For i = 1 To Count
Num(i) = Int((MaxNumarea)*Rnd + 1)
If i > 1 Then
For n = 1 To i-1
If Num(i) = Num(n) Then
Num(i) = Int((MaxNumarea)*Rnd + 1)
n = 0
End If
Next
End If
Next
CreateRandomNum = Num '返回数组
End Function作者: gdutlzl 时间: 2010-6-30 14:58
谢谢楼上的回复,不过我发现你的代码还是有可能出现重复数字的,你的做法是新产生的随机数跟之前的重复的时候再随机产生一个数字,但这个新产生的随机数没有跟之前产生的随机数进行比较,还是有可能重复的,所以我想用递归的方法,使得每次有重复随机数后,再产生的随机数也要进行比较作者: TIB 时间: 2010-6-30 15:33
不用递归
Dim num,A(6),Redvalue
Randomize
num = 0
Redvalue = 0
While num<6
newnum = Int(20 * Rnd + 1)
iR = False
For I = 0 To num
IF A(I) = newnum Then
iR = True
End IF
Next
If iR = False Then
A(num) = newnum
num = num + 1
End If
Wend作者: skyzhu 时间: 2010-6-30 16:55 标题: 回复 3# 的帖子 不会重复的
n=0 是关键