各位前辈.
   我今天就用这样的语句产生的随机数是有重复数据的,请指教怎么能产生不重复的随机数.
    Randomize
    my1 = Int(15* Rnd(15) + 1)
    
         非常感谢!!1

解决方案 »

  1.   

    Randomize
    my1 = Int(15* Rnd() + 1)
      

  2.   

    可以用集合解决,试试:
        dim icil as new collection
        dim i as integer, index as integer
        dim my1
        
        for i =1 to 15
            icol.add i     '将1-15添加到集合中
        next i
        
        for i=1 to icol.count
            randomize
            index = cint(rnd * (iCol.count - 1))+ 1 '随机取得index
            my1 = icol.item(index)                  '对应index的数字
            print my1
            icol.remove index                       '删除这个数字,以免重复
        next
        set icol = nothing
      

  3.   

    家人你的在执行到
     icol.add i  时  出现了错误
       提示要求对象
       田野的方法产生的随机数跟我的一样,   faysky  你的和我的一样都是用当前的时间做为rnd函数的随机数种子   都一样不行   小仙妹的跳蚤算法还请指教
     
         谢谢各位的帮忙!!!!
      

  4.   

    哦 这样:
    dim icil as collection
    set icol=new collection
      

  5.   

    试过了  :    Dim iCol As Collection
        Dim i As Integer, index As Integer
        Dim Nums
        
        Set iCol = New Collection
        For i = 1 To 15
            iCol.Add i
        Next
        
        For i = 1 To iCol.count
            Randomize
            index = CInt(Rnd * (iCol.count - 1)) + 1
            Nums = iCol.Item(index)
            Print Nums
            iCol.Remove index
        Next
        Set iCol = Nothing
      

  6.   

    ok 了   谢谢了!!!!
    让你看看我的把   哈哈  吓死你,但是也实现了功能.我的头都大了...
    If n = 2 Then
            Do
            Randomize                           '初始化随机函数
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1
            b1 = b
        End If
        If n = 3 Then
     
            Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1
            b2 = b
        End If
        If n = 4 Then        Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2
            b3 = b
        End If
        If n = 5 Then        Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3
            b4 = b
        End If
        If n = 6 Then        Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4
            b5 = b
        End If
        If n = 7 Then        Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4 Or b = b5
            b6 = b
         End If
         If n = 8 Then
     8        Randomize
            b = Int(a * Rnd(a) + 1)
            While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4 Or b = b5 Or b = b6
            b7 = b
         End If
        If n = 9 Then
        'Case Is = 9
            Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4 Or b = b5 Or b = b6 Or b = b7
            b8 = b
        End If
        If n = 10 Then
        'Case Is = 10
            Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4 Or b = b5 Or b = b6 Or b = b7 Or b = b8
            b9 = b
        End If
        If n = 11 Then
        'Case Is = 11
            Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4 Or b = b5 Or b = b6 Or b = b7 Or b = b8 Or b = b9
            b10 = b
        End If
        If n = 12 Then
        'Case Is = 12
            Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4 Or b = b5 Or b = b6 Or b = b7 Or b = b8 Or b = b9 Or b = b10
            b11 = b
        End If
        If n = 13 Then
        'Case Is = 13
            Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4 Or b = b5 Or b = b6 Or b = b7 Or b = b8 Or b = b9 Or b = b10 Or b = b11
            b12 = b
        End If
        If n = 14 Then
        'Case Is = 14
            Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4 Or b = b5 Or b = b6 Or b = b7 Or b = b8 Or b = b9 Or b = b10 Or b = b11 Or b = b12
            b13 = b
        End If
        If n = 15 Then
        'Case Is = 15
            Do
            Randomize
            b = Int(a * Rnd(a) + 1)
            Loop While b = my1 Or b = b1 Or b = b2 Or b = b3 Or b = b4 Or b = b5 Or b = b6 Or b = b7 Or b = b8 Or b = b9 Or b = b10 Or b = b11 Or b = b12 Or b = b13
        End If
        Set rs = Nothing
        rs.Open "select * from sht01_table where Trim(sht01_table.sht01_ID)='" & Trim(b) & "'", cn, 3, 3
      

  7.   

    不知道你是什么数据库,如果是SQL,那么SQL语句就可以搞定:
    select top 5 * from tb order by newid()随机取得5条数据
      

  8.   

    不是的,  我用的是access数据库.
        我写的是模拟考试软件,sql太不方便了.    真是谢谢你了!!!!!
      

  9.   

    我今天就用这样的语句产生的随机数是有重复数据的,请指教怎么能产生不重复的随机数.
        Randomize
        my1 = Int(15* Rnd(15) + 1)意见:
    取当前系统时间的秒数做为随机因子,这样就差不多是真的随机了, 因为这个种子是变动的
    要真的不重复的话就把产生的随机数存在数组里面,然后在重数组里把重复的去掉就可以了例:
     dim temparr()as integer 
     dim tempstr as string 
     For i = 1 To 100
            Randomize
            tempstr =tempstr &"," &  CInt(Rnd * (iCol.count - 1)) + 1        
    Next
    temparr=splite(tempstr ,",")然后去掉重复的就可以了