VB制作抽号器如何排除重复?

来源:百度知道 编辑:UC知道 时间:2024/06/18 01:43:49
请问各位,用VB如何制作具有排除重复的抽号器呢?
我是用
Private Sub Timer1_Timer()
Randomize
Select Case Int(Rnd * 53 + 1)
Case 1
Label1.Caption = "张三"
Case 2
Label1.Caption = "李四"
………………
的语句写的,请问怎样在这个基础上写出排除重复呢?就是说第一次抽了张三,第二次就不会再重复出现张三了。
还有怎样设立一个复位键,就是当我要重头抽取的时候,就把之前抽过的人的名单也列入到抽取范围内,也就是在这个时候任何人都可以抽取到。
比如我之前有张三、李四、王五三个人,第一次抽到了张三,然后第二次的结果就只会在李四和王五两个人中产生,然后我按一个复位键,就把张三列入到抽取的范围内再抽过
请问怎样设计?
其实一楼的思路我想过的,就是检索时否重复,重复的时候就使用goto语句循环抽下去,直到抽到不重复的语句为止。但是这样未免太过复杂繁琐了,所以我想请教一下有没有简便的方法
或者不要使用我这个笨拙的select case来写这个抽号器,比如用数组等其他方法又该怎样写?写个段例子出来参考一下
满意我追加多分哦,谢谢了

用个队列比较好吧,可以实现最近n个不重复,效果不错的,我设置成8个

Randomize
Static c As New Collection
Dim num As Long
On Error Resume Next
Do
num = Int(Rnd * 53 + 1)
Loop Until c("K" & num) = ""
If c.Count = 0 Then
c.Add num, "K" & num
Else
c.Add num, "K" & num, 1
If c.Count >= 8 Then c.Remove c.Count
End If

' num为生成的,最近8个不会重复
Select Case Int(Rnd * 53 + 1)
Case 1
Label1.Caption = "张三"
Case 2
Label1.Caption = "李四"
'....

这样 显然有重复 的

可以这样:产生一个新数 时就去已产生的数里 找找,如果 有 丢弃,再 产生一个!

祝你顺利

你可以这样来实现,用一个二维数组,array(53,53),第一位可以用来保存抽的人的名字,第二位用来标记是否被抽过,一开始第二位全部为0(表示没有被抽过),当抽过了后设置1,每次抽的时候只用判读第二位的值就可以检验是否重抽。当点复位键后,第二位全部置0。
祝你好运!

要防止重复,就要将已取得的数字存入数组,取得下一个数字时,对比数组里的值,相同时就舍弃,重新取,不相同时,继续下一步!

Text1 设置 MULTILINE=true 以及 SCROLLBAR=Vertical 属性

Private Sub Command1_Click()
Randomize
If Lis