回 帖 发 新 帖 刷新版面

主题:一个逻辑性错误。。我找不到错。大家帮忙看看

一段产生不重复随机数的代码。。有问题,,现在还是要产生要重复的随机数。。大家帮我看看那错了。。。。


            For i = 0 To PDSZ.GetUpperBound(0)‘是一个数组

LoopThis:
                Randomize()
                Inum1 = CInt(Int((60 - 1 + 1) * Rnd() + 1))‘产生随机数
                If Check() = True Then'判断数组里面有没有这个数了。有就重新做
                    GoTo LoopThis
                Else
                    PDSZ(i) = Inum1'写进数组
                End If
            Next

Private Function Check() As Boolean'判断的函数
        Dim i As Integer

        For i = 0 To PDSZ.GetUpperBound(0)
            If PDSZ(i) <> Inum1 Then
                Return False
            Else
                Return True
                Exit For
                Exit Function
            End If
        Next
    End Function


现在还是要产生重复的。。昏了。。不知道那错了

回复列表 (共6个回复)

沙发

Inum1 = CInt(Int((60 - 1 + 1) * Rnd() + 1))‘产生随机数
看一下是不是这里有问题:是不是把“60 - 1 + 1”中的i写成1了?

板凳

Dim random As New Random
        Dim randomnumber As Integer
        For randomnumber = 0 To 9
            TextBox14.Text = random.Next(9999999)
next
这段代码可实现随机产生7位数。

3 楼

你的check()函数功能有问题
它并不能遍历比较数组的每一个元素,你的循环中的if,else里面都有return,也就是说这个循环实际上只能运行一圈就结束了,return的作用会跳出这个function的执行并返回值,你在return后面写exit for是执行不到的。

4 楼

应该怎么把这个check()函数改一下呢?[em10][em10]

5 楼

你那个check()函数怎么看怎么奇怪
总觉得读不到每一个记录,好象读完一次就直接跳出check()函数了,是RETURN那里出问题了。
我再琢磨一下哈,最近脑子有点迟钝了,呵呵

6 楼

For i = 0 To PDSZ.GetUpperBound(0)‘是一个数组

   LoopThis:
           Randomize()
           Inum1 = CInt(Int((60 - 1 + 1) * Rnd() + 1))‘产生随机数
           Check()
           If CheckBoolean= True Then'判断数组里面有没有这个数了。有就重新做
                GoTo LoopThis
           Else
                PDSZ(i) = Inum1'写进数组
           End If
Next

public CheckBoolean as Boolean
Private Function Check() '判断的函数
        Dim i As Integer

        For i = 0 To PDSZ.GetUpperBound(0)
            If PDSZ(i) <> Inum1 Then
               CheckBoolean = False
            Else
               CheckBoolean = True
               Exit For
            End If
        Next
            Return CheckBoolean
    End Function

我来回复

您尚未登录,请登录后再回复。点此登录或注册