Office中国论坛/Access中国论坛
标题:
关于随机产生不重复数
[打印本页]
作者:
chuang0321
时间:
2010-1-20 10:15
标题:
关于随机产生不重复数
前天,同事要我帮忙做一个舒尔特方格的测试软件,我答应了。
在该软件中需要生成1-25以内的随机不重复数。根据网上搜寻的结果,我利用rud()函数。
可是,不知道什么问题,有些时候还是会生成重复数据。所以我只好利用了笨方法重新生成随机数据。
坛子里面的高手,能否帮我看看问题在什么地方。如果能够解决生成重复数问题,我这个程序就可以大大简化了。[attach]41249[/attach]
作者:
方漠
时间:
2010-1-20 11:50
见附件,新加了一个按钮,和你原来的代码没有多大联系,不过还是要用到那个TABLE.
另外,我的算法越往后越费时, 即25个只剩1个未选中时, 需求随机直至那个选中为止. 你可以自己优化一下,只填20个文本框,后面的5个数按顺序填入剩下的5个文本框就行.
作者:
方漠
时间:
2010-1-20 11:53
自己测了一下,汗,18秒,中等水平.
作者:
chuang0321
时间:
2010-1-20 14:05
谢谢方漠版主,使用“Me.Controls("Text" & I) ”后代码少多了(我一直再找这个代码写法)。
我曾有一个想法,就是每提取一次数据,就产生一个查询,查询没有被使用的数字后生成带自动编号的表,然后再在此表中随机提取一个数,如此类推。这样一来,就肯定不会出现重复数的问题了。但是,我没有解决查询后增加自动编号字段的问题。
作者:
fan0217
时间:
2010-1-21 19:55
如何产生不重复的随机数?
先创建个类模块:Random
类模块代码如下:
Dim c As Collection
'初始化,定义产生随机数的最小值和最大值
Public Sub Init(min As Integer, max As Integer)
Set c = New Collection
Dim i As Integer
For i = min To max
c.Add i
Next
End Sub
'产生不重复的随机数
Public Function RandomNext() As Integer
Dim i As Integer
Dim number As Integer, upperbound As Integer
upperbound = c.Count
If upperbound > 0 Then
number = Int((upperbound) * Rnd + 1)
RandomNext = CInt(c.Item(number))
c.Remove (number)
Else
RandomNext = 0
End If
End Function
Private Sub Class_Terminate()
Set c = Nothing
End Sub
复制代码
测试:
Dim r As New Random
Sub Test() '请先运行Init
Dim i As Integer
For i = 0 To 10
Debug.Print r.RandomNext
Next
End Sub
Sub Init()
r.Init 1, 100
End Sub
复制代码
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3