这段代码的功能是把1-16的数字进行随机排列。要求无重复,无遗漏
为了实现这个功能困惑了很久。昨天在CSDN找到了这段代码。有些地方不太
明白。请各位路过者帮忙解释一下。谢谢
Private Sub Cmdrun_Click()
Dim jh As New Collection
For i = 1 To 16
jh.Add i
Next
Label1.Caption = ""
For ii = 1 To 16
Randomize
bb = Int(Rnd * jh.Count + 1)
aa = aa & " " & jh.Item(bb)'这句在这段代码中作用是什么?
                                'jh.Item(bb)是什么意思?
jh.Remove bb  '这句在这段代码中作用是什么?为什么去掉这行就会重复呢?
Next
Label1.Caption = aa
End Sub

解决方案 »

  1.   

    aa = aa & " " & jh.Item(bb)'这句在这段代码中作用是什么? 
                                    'jh.Item(bb)是什么意思? 
    这句是把选择出的数字连接到一个字符串中。
    jh.Item(bb) 是 jh 的 bb 项jh.Remove bb  '这句在这段代码中作用是什么?为什么去掉这行就会重复呢?
    因为从集合中删除了选中的项。
      

  2.   

    还要一个问题是 随机数为什么不会选中删除项呢?因为已经删除掉了,jh.Count 会随之减少。把集合改成 ListBox 你就容易理解了:For i = 1 To 16 
        List1.AddItem i 
    Next i
     
    Randomize
    For i = 1 To 16 
    n = Int(Rnd * List1.ListCount) 
    Debug.Print List1.Lis(n) 
    List1.RemoveItem n
    Next i你在最后一行 Next i 处设一个断点,逐个循环跑跑看,就明白了。
    想象力也是编程必不可少的训练科目。