Dim Count as integer,lowlimit as integer,uplimit as integer Dim i As Integer,i As Integer Dim TempGet() As Integer
ReDim TempGet(Count) As Integer
For i = 0 To Count - 1 TempGet(i) = (UpLimit - LowLimit - i) * Rnd() + LowLimit Check: For j = 0 To i - 1 If TempGet(i) = TempGet(j) And i <> j Then TempGet(i) = TempGet(i) + 1 GoTo Check End If Next j Next i測試通過
再具体些,这样吧: dim ix as integer,iy as integer,iTmp as integer dim aryTemp(10) as integer randomize for ix=0 to 9 '获取随机数 iTmp=int(255*rnd+1) '循环原先的数组检查重复性 for iy=0 to ix if iTmp=aryTemp(iy) then '如果重复则退回前一步并退出检查循环 ix=ix-1 exit for else '如果不重复 if iy=ix then '将合法随机数添加到数组中的最末位 aryTemp(ix)=iTmp endif endif next next数组里的10个数就是1至255范围内的随机数,并都做了重复性的检查
楼上的说的对,现在我还没有其它办法例如, 要产生1到10之间的随机数的话,先声明一个有6个元素的数组 Dim a(10) As Integer, i As Integer, j As Integer Dim tru As Boolean Dim ran As Integer i = 1: tru = False Do While (i <= 10) ran = Int(10 * Rnd + 1) For j = 1 To i - 1 If ran = a(j) Then tru = True Next j If tru = False Then a(i) = ran i = i + 1 End If tru = False Loop
private Sub GetRand(Count As Long, LowLimit As Long, UpLimit As Long) ' Count '用於記數 ' lowlimit '下限 ' uplimit '上限 Dim i As Integer,i As Integer Dim TempGet() As Integer '你所要的結果
ReDim TempGet(Count) As Integer
For i = 0 To Count - 1 '共需要這么多個數 Randomize '复位隨机數种子 TempGet(i) = (UpLimit - LowLimit - i) * Rnd() + LowLimit Check: For j = 0 To i - 1 '對每一個生成的隨机數與以前生成的數相比較 If TempGet(i) = TempGet(j) And i <> j Then '如果有重復就自加一 TempGet(i) = TempGet(i) + 1 GoTo Check '并重新檢查 End If Next j Debug.Print TempGet(i) Next i End Sub可以這樣測試: 重復調用getrand(4,1,4),每次的結果一定是1,2,3,4,但順序是隨机的
Dim i As Integer,i As Integer
Dim TempGet() As Integer
ReDim TempGet(Count) As Integer
For i = 0 To Count - 1
TempGet(i) = (UpLimit - LowLimit - i) * Rnd() + LowLimit
Check:
For j = 0 To i - 1
If TempGet(i) = TempGet(j) And i <> j Then
TempGet(i) = TempGet(i) + 1
GoTo Check
End If
Next j
Next i測試通過
dim ix as integer,iy as integer,iTmp as integer
dim aryTemp(10) as integer
randomize
for ix=0 to 9
'获取随机数
iTmp=int(255*rnd+1)
'循环原先的数组检查重复性
for iy=0 to ix
if iTmp=aryTemp(iy) then
'如果重复则退回前一步并退出检查循环
ix=ix-1
exit for
else
'如果不重复
if iy=ix then
'将合法随机数添加到数组中的最末位
aryTemp(ix)=iTmp
endif
endif
next
next数组里的10个数就是1至255范围内的随机数,并都做了重复性的检查
要产生1到10之间的随机数的话,先声明一个有6个元素的数组
Dim a(10) As Integer, i As Integer, j As Integer
Dim tru As Boolean
Dim ran As Integer
i = 1: tru = False
Do While (i <= 10)
ran = Int(10 * Rnd + 1)
For j = 1 To i - 1
If ran = a(j) Then tru = True
Next j
If tru = False Then
a(i) = ran
i = i + 1
End If
tru = False
Loop
' Count '用於記數
' lowlimit '下限
' uplimit '上限
Dim i As Integer,i As Integer
Dim TempGet() As Integer '你所要的結果
ReDim TempGet(Count) As Integer
For i = 0 To Count - 1 '共需要這么多個數
Randomize '复位隨机數种子
TempGet(i) = (UpLimit - LowLimit - i) * Rnd() + LowLimit
Check:
For j = 0 To i - 1 '對每一個生成的隨机數與以前生成的數相比較
If TempGet(i) = TempGet(j) And i <> j Then
'如果有重復就自加一
TempGet(i) = TempGet(i) + 1
GoTo Check '并重新檢查
End If
Next j
Debug.Print TempGet(i)
Next i
End Sub可以這樣測試:
重復調用getrand(4,1,4),每次的結果一定是1,2,3,4,但順序是隨机的
另外,昨天好象有类似的,你查一下,应该没问题!!!