以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何产生不重复的随机数 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=127702) |
||||
-- 作者:明天的灵 -- 发布时间:2018/11/20 14:15:00 -- 如何产生不重复的随机数 从产生000~999之间产生300个不重复的随机数,过程显示在文本框中,并存入表C的第一列。 DataTables("表C").DeleteFor("") Dim i As Integer Dim tt As Boolean \'判断是否重复随机楼 Dim txt As WinForm.TextBox = e.Form.Controls("TextBox1") Tables("表C").StopRedraw For i = 1 To 300 Dim r As Row= Tables("表C").AddNew Do \'循环,至少一次 Dim Val As String = Rand.Next(1000) \'生成0到999之间的随机整数 Dim s As String = val.PadLeft(3, "0") Dim dr As DataRow dr =DataTables("表C").Find("第一列 = \'& s &\'") If dr IsNot Nothing Then \'如果找到的话 \'重新求随机数 tt = True Else txt.Text = s \'文本框显示随机数 r("第一列") = s tt = False \'找到不重复的随机数,DO循环结束 End If Loop While tt Next Tables("表C").ResumeRedraw 以上语句会产生死循环,可能大量时间浪费在查找不重复的随机数上,而且在随机数产生过程中,文本框也没跟着变化,请问下,如何改进?
[此贴子已经被作者于2018/11/20 14:22:44编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2018/11/20 14:38:00 -- 换一种思路,如
Dim dt As DataTable = DataTables("表C") [此贴子已经被作者于2018/11/21 9:14:48编辑过]
|
||||
-- 作者:明天的灵 -- 发布时间:2018/11/20 15:05:00 -- 谢谢甜版主,结果对的,可惜看不懂后面二段代码 [此贴子已经被作者于2018/11/20 15:14:17编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2018/11/20 18:02:00 -- 以下是引用明天的灵在2018/11/20 15:05:00的发言:
谢谢甜版主,结果对的,可惜看不懂后面二段代码 [此贴子已经被作者于2018/11/20 15:14:17编辑过]
1、把0-999的数值取出来,存放起来;
2、开始洗牌:随机交互两个位置的数字,交换任意次数,打乱数字;
3、取出任意一个位置的300个数字。 |
||||
-- 作者:明天的灵 -- 发布时间:2018/11/20 21:19:00 -- 哦,这么一说终于理解了,非常感谢!特别是洗牌时,二个任意位置对调,而且第三步,用任意位置去得到任意数,都很巧! [此贴子已经被作者于2018/11/20 21:23:09编辑过]
|