我想要取一个整数数组,其中包含4-8个小于8的整数,并且不要重复的数字,我用以下函数不能避免重复数字的出现,请问有什么好办法能实现预想的要求。我用的是VB6.0Private Function goodsNumber()
Dim goodsCount as Integer
Dim goods() as Integer
Randomize 
goodsCount=Int(4*rnd())+3
Redim goods(goodsCount)
For i=0 To goodsCount
goods(i)=Int(8*Rnd())
Next
goodsNumber = goods
End Function

解决方案 »

  1.   

    Private Function goodsNumber()
    dim vstr as string
    Dim goodsCount as Integer
    Dim goods() as Integer
    Randomize 
    vstr="12345678"
    vstr=mid(vstr,Int(3*rnd()),Int(4*rnd())+3)
    goodsCount =len(vstr)
    Randomize
    redim goods(goodsCount)
    do
      i=Int(goodscount*rnd())
      goods(i)= mid(vstr ,i,1)
      vstr=left(vstr,i) & right(vstr,len(vstr)-i)
    loop until vstr=""
    goodsNumber = goods
    End Function
      

  2.   

    再修改一下:Private Function goodsNumber()
    dim vstr as string
    Dim goodsCount as Integer
    Dim goods() as Integer
    Randomize 
    vstr="12345678"
    vstr=mid(vstr,Int(3*rnd()),Int(4*rnd())+3)
    goodsCount =len(vstr)
    Randomize
    redim goods(goodsCount)
    do
      i=Int(len(vstr)*rnd())
      goods(i)= mid(vstr ,i,1)
      vstr=left(vstr,i-1) & right(vstr,len(vstr)-i)
    loop until vstr=""
    goodsNumber = goods
    End Function
      

  3.   

    Private Function goodsNumber()
        Dim goodsCount As Integer
        Dim goods() As Integer
        Dim used(8) As Boolean
        
        Randomize
        goodsCount = Int(4 * Rnd()) + 3
        ReDim goods(goodsCount)
        
        For i = 0 To goodsCount
            goods(i) = Int((8 - i) * Rnd())
            j = 0
            Do While j <= goods(i)
                If used(j) Then goods(i) = goods(i) + 1
                j = j + 1
            Loop
            used(goods(i)) = True
        Next
        
        goodsNumber = goods
    End Function
      

  4.   

    行了,完结编Dim vstr As String
    Dim goodsCount As Integer
    Dim goods() As Integer
    Randomize
    vstr = "1234567"
    goodsCount = Int(3 * Rnd()) + 4
    Randomize
    ReDim goods(goodsCount - 1)
    i = 0
    Do
      Randomize
      j = Int((Len(vstr) - 1) * Rnd()) + 1
      goods(i) = Mid(vstr, j, 1)
      vstr = Left(vstr, j - 1) & Right(vstr, Len(vstr) - j)
      i = i + 1
    Loop Until i >= goodsCount
      

  5.   

    fanzai(帆仔) ,你太多循环了,增加运算时间
      

  6.   

    另外,其实字符串的操作(&相加、mid,left,right取子串)都隐含有相当多的循环操作,只是隐含由系统完成了。不过字符串这个方法的确很高!呵呵!学习!