当同时抽奖的人数和未中奖的剩余人数一样多时,程序不响应.
Private Sub Timer1_Timer()
Dim ArrAllRY() As String '未中奖人员
Dim ArrZJRY() As Integer '抽中人员
Dim nNum As Integer '抽奖人数
Dim nAllNum As Integer '总人数
Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim b As Boolean
Dim b2 As Boolean
Timer1.Enabled = False
For i = 0 To nNum - 1
Randomize
b = True
b2 = True
Do While b2
n = (nAllNum - 1) * Rnd()
b = False
For j = 0 To i
If ArrZJRY(j) = n Then
b = True
End If
Next j
b2 = b
Loop
ArrZJRY(i) = n
xm(i).Caption = ArrAllRY(ArrZJRY(i), 1) & "(" & ArrAllRY(ArrZJRY(i), 0) & ")"
Next
Timer1.Enabled = True
cmd_start.Enabled = True
End Sub
Private Sub Timer1_Timer()
Dim ArrAllRY() As String '未中奖人员
Dim ArrZJRY() As Integer '抽中人员
Dim nNum As Integer '抽奖人数
Dim nAllNum As Integer '总人数
Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim b As Boolean
Dim b2 As Boolean
Timer1.Enabled = False
For i = 0 To nNum - 1
Randomize
b = True
b2 = True
Do While b2
n = (nAllNum - 1) * Rnd()
b = False
For j = 0 To i
If ArrZJRY(j) = n Then
b = True
End If
Next j
b2 = b
Loop
ArrZJRY(i) = n
xm(i).Caption = ArrAllRY(ArrZJRY(i), 1) & "(" & ArrAllRY(ArrZJRY(i), 0) & ")"
Next
Timer1.Enabled = True
cmd_start.Enabled = True
End Sub
nNum = txt_peo.Text 'txt_peo.text是同时抽取的人数
这个是在"开始"按钮里面赋值的.然后再调用Timer1_Timer
Dim nNum As Integer '抽奖人数
这个不应该定义在这里,放到窗体代码的头部
就是这个代码."开始"按钮后就调用Timer1_Timer
n = (nAllNum - 1) * Rnd() '<-1'
B = False
For j = 0 To i
If ArrZJRY(j) = n Then '<-2'
B = True
End If
Next j
b2 = B
Loop
1)n 取值可以是 0
2)如果没猜错的话 ArrZJRY(j) 默认值为 0,这样等于将 n 为 0 的情况排除了。
当 nNum = nAllNum 时,要选出 nNum 个,可符合条件的只有 nNum-1 个,当然无法结束循环了。建议将 ArrZJRY 数组的所有成员初始化为 -1。
Private Sub cmd_start_Click()
ReDim ArrZJRY(nNum - 1)
Sleep 500
readAllRY '读取所有未中奖人员
Timer1.Enabled = True
End Sub"开始"按钮的代码