我写的代码会生成1-9之间的随机数。
我现在想添加到此并生成一个随机数,但是如果以前已经使用过该数字,则生成一个新数字。
Sub main()
Dim max,min
max=9
min=1
Randomize
MsgBox(Int((max-min+1)*Rnd+min))
//生成1-9之间的随机数
我曾经尝试实现一个循环,但是我不确定它会如何工作,因为我需要将生成的数字保留在内存中
If Int = random
Msgbox("Already in use")
End If
If Int = not random Then
Msgbox("Can be used")
End If
End Sub
答案 0 :(得分:2)
像您这样的声音只想跟踪已经选择了哪些随机数。您可以通过多种方法来处理此问题(例如,使用数组,哈希表/字典,数字位掩码等)
我在下面介绍的解决方案类似于数字位掩码,但是使用字符串。从全零(例如“ 0000”)开始,字符串中的每个可索引位置都填充一(1),直到字符串变为全1(例如“ 1111”)。尽管可能会过分简化-因为它假设您的分钟数始终为一(1),所以它应该使您入门。
4 4 4
15
195
1 1 4
195
样本输出:
Dim min : min=1
Dim max : max=9
Dim result : result = ""
Dim r, s: s = String(max, "0")
Randomize
Do
r = Int((max-min+1)*Rnd+min)
If "0" = Mid(s, r, 1) Then
WScript.Echo "Can be used: " & r
result = result & ":" & r
s = Left(s, r-1) & "1" & Right(s, max-r)
Else
WScript.Echo "Already in use: " & r
End If
Loop Until String(max, "1") = s
WScript.Echo "Result" & result
希望这会有所帮助。