使用vb 6.0生成游戏,在一个面上我需要生成1到100之间的非重复随机数。我使用以下代码生成随机数
dim n(10) as integer
for i=0 to 9
n(i)=round(rnd*100)
next i
代码在for循环中,因此它会随机生成10个Nos,但它包含重复的数字以及' 0',是他们的任何建议,以避免重复数字和' 0&#39 ; 然后我的代码的输出是:
N()= {的 42 下,14,10,22,5,的 42 下,12,的 0 下,59,72} < / p>
数字42在数组中出现两次,0无法避免
提前致谢
答案 0 :(得分:2)
这是一个简单的技术
Dim n(10) As Integer
Dim choice(100) As Integer
' Create a list of possible numbers
For i = 0 To 100
choice(i) = i
Next
' Populate the array with unique numbers
For i = 1 To 10
lastix = 101 - i
' Find one that has not been selected
ix = Round(Rnd * lastix)
' Assign it
n(i) = choice(ix)
' Replace with one that has not been used
choice(ix) = choice(lastix)
Next
您可以使用相同的技术来洗牌。
答案 1 :(得分:1)
要避免0,请乘以99并添加1.要避免重复,请跟踪生成的内容,如果重复,请重试。 (因为你只需要几个数字。如果你需要很多数字,可以随机抽取一系列可能的结果并接受初始成员。)
答案 2 :(得分:-1)
下面的解决方案并不是最快的解决方案,但由于这一点很容易弥补......
它使用隐藏的列表框控件,其中包含所需的值,并且每次都会随机返回
此示例中的值只是索引的平方数
运行项目并单击命令按钮以查看会发生什么。它应该以随机顺序显示带有方形数字的消息框
'1 form with:
'1 listbox control : name=List1
'1 command button : name=Command1
Option Explicit
Private Sub Command1_Click()
Dim intIndex As Integer
'generate a new random sequence every time
Randomize Timer
'loop through the list and retreive 1 random value at a time
With List1
Do While .ListCount > 0
intIndex = Int(Rnd * .ListCount)
MsgBox .List(intIndex)
'remove the used item from the list
.RemoveItem intIndex
Loop
End With 'List1
End Sub
Private Sub Form_Load()
Dim intIndex As Integer
'hide listbox
List1.Visible = False
'fill listbox with values (squares)
List1.Clear
For intIndex = 1 To 10
List1.AddItem CStr(intIndex * intIndex)
Next intIndex
End Sub
顺便说一下,我只是使用10个号码,所以你不必点击100个留言箱:)