可以利用数组。初期化的时候先把数组顺序赋值1~100,每次抽随机数作为下标,用过这个元素后把它换到数组后面的位置。把每次用过的数移到下次抽随机数的范围外就不会出现为了排除抽出的重复记录而造成大量循环的现象了。
例,在Form上放一个List控件和一个Command控件。
假设数组名是a,第一次在1~100范围内抽一个数,把下标是这个数的元素值输出来,并把这个元素值跟a(100)交换一下;第二次从1~99间抽一个下标,把这个数输出并跟a(99)交换。 。。
List1上显示的就是你要的效果。
Private Sub Command1_Click()
Dim a(100) As Inte...全部
可以利用数组。初期化的时候先把数组顺序赋值1~100,每次抽随机数作为下标,用过这个元素后把它换到数组后面的位置。把每次用过的数移到下次抽随机数的范围外就不会出现为了排除抽出的重复记录而造成大量循环的现象了。
例,在Form上放一个List控件和一个Command控件。
假设数组名是a,第一次在1~100范围内抽一个数,把下标是这个数的元素值输出来,并把这个元素值跟a(100)交换一下;第二次从1~99间抽一个下标,把这个数输出并跟a(99)交换。 。。
List1上显示的就是你要的效果。
Private Sub Command1_Click()
Dim a(100) As Integer
Dim b As Integer
Dim t As Integer
Dim i As Integer
Dim upperbound As Integer
'初始化
For i = 1 To 100
a(i) = i
Next
List1。 Clear
Randomize
For upperbound = 100 To 51 Step -1
'抽1~upperbound范围内的随机数作为下标
b = Int(upperbound * Rnd + 1)
List1。 AddItem a(b)
'把本次用过的换到下次抽出的范围外
t = a(b)
a(b) = a(upperbound)
a(upperbound) = t
Next upperbound
End Sub
========================
1000个元素的数组也不算很大吧。 。现在的电脑的速度,只在内存中做这些处理是非常快的。
不过倒是最好避免在循环中一次一次执行SQL语句。。跟数据库交互比较影响速度。
每次数量不同的话可以用
ReDim a(长度)
来重新指定数组长度。 收起