设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2969|回复: 4
打印 上一主题 下一主题

[帮助] 关于随机产生不重复数

[复制链接]
跳转到指定楼层
1#
发表于 2010-1-20 10:15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天,同事要我帮忙做一个舒尔特方格的测试软件,我答应了。
在该软件中需要生成1-25以内的随机不重复数。根据网上搜寻的结果,我利用rud()函数。
可是,不知道什么问题,有些时候还是会生成重复数据。所以我只好利用了笨方法重新生成随机数据。

坛子里面的高手,能否帮我看看问题在什么地方。如果能够解决生成重复数问题,我这个程序就可以大大简化了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2010-1-20 11:50:27 | 只看该作者
见附件,新加了一个按钮,和你原来的代码没有多大联系,不过还是要用到那个TABLE.
另外,我的算法越往后越费时, 即25个只剩1个未选中时, 需求随机直至那个选中为止. 你可以自己优化一下,只填20个文本框,后面的5个数按顺序填入剩下的5个文本框就行.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
发表于 2010-1-20 11:53:33 | 只看该作者
自己测了一下,汗,18秒,中等水平.
4#
 楼主| 发表于 2010-1-20 14:05:20 | 只看该作者
谢谢方漠版主,使用“Me.Controls("Text" & I) ”后代码少多了(我一直再找这个代码写法)。
我曾有一个想法,就是每提取一次数据,就产生一个查询,查询没有被使用的数字后生成带自动编号的表,然后再在此表中随机提取一个数,如此类推。这样一来,就肯定不会出现重复数的问题了。但是,我没有解决查询后增加自动编号字段的问题。
5#
发表于 2010-1-21 19:55:03 | 只看该作者
如何产生不重复的随机数?
先创建个类模块:Random

类模块代码如下:

  1. Dim c As Collection
  2. '初始化,定义产生随机数的最小值和最大值
  3. Public Sub Init(min As Integer, max As Integer)
  4. Set c = New Collection
  5. Dim i As Integer
  6.     For i = min To max
  7.         c.Add i
  8.     Next
  9. End Sub
  10. '产生不重复的随机数
  11. Public Function RandomNext() As Integer
  12. Dim i As Integer
  13. Dim number As Integer, upperbound As Integer
  14.     upperbound = c.Count
  15.     If upperbound > 0 Then
  16.         number = Int((upperbound) * Rnd + 1)
  17.         RandomNext = CInt(c.Item(number))
  18.         c.Remove (number)
  19.     Else
  20.         RandomNext = 0
  21.     End If
  22. End Function
  23. Private Sub Class_Terminate()
  24.     Set c = Nothing
  25. End Sub
复制代码


测试:

  1. Dim r As New Random
  2.   
  3. Sub Test() '请先运行Init
  4. Dim i As Integer
  5.     For i = 0 To 10
  6.        Debug.Print r.RandomNext
  7.     Next
  8. End Sub
  9. Sub Init()
  10.     r.Init 1, 100
  11. End Sub
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 09:55 , Processed in 0.094591 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表