VB中产生10个不重复的随机数

前几天听了米老师的课,才知道自己真的是学得都是似懂非懂,“一桶水不满,半桶水晃荡”这个比喻是最恰当不过了。

米老师经常告诉我们说要脚踏实地地学习,那何为脚踏实地呢?我的理解是把你在哪一方面不懂的知识学会就是脚踏实地,就比如说用VB产生10随机数,我们看着好像会了,但没有真正地去实现过;或者说我们已经实现了,但没有去总结,当真正要用到的时候,却摸不着头脑,不知如何去做。

VB编程语言来产生10个不重复的随机数,有两种方法

下面分别用VB编程来实现这一过程:

【一】

Dim a(9) As Integer,i As Integer,j As Integer '定义数组及循环变量
Dim temp As Integer '定义一个临时变量存储生成随机数
Dim flag As Integer '定义一个变量来给数组元素做标记
 
Private Sub Form_Click()
    Randomize '初始化随机数发生器
    For i = 0 To 9 '外循环,用来生成10个随机数和将满足条件的这10个随机数由if条件判断输出
        temp = Int(Rnd * 100 + 1) '生成一个0~100中的随机数存放在temp中
 
        flag = False '假设此时的重复标识为false(不重复)
        For j = 0 To i - 1 '内循环,用来筛选外循环生成随机数是否和已存入数组的任何一个元素重复
            If temp = a(j) Then
                i = i - 1 '如果重复,则通过将循环变量减1来退回到上一个循环
                flag = True '假设重复标识设置为true(重复)
                Exit For '由于在数组中已经存在这次循环所生成的数,于是废掉这个数,放弃这次循环
            End If
        Next j
        If flag = False Then
            a(i) = temp '如果标识不再重复,那当前的随机数满足条件,将这个数存入数组
            If i = 9 Then
                Print a(i) & Chr(13) & Chr(10)
            Else
                Print a(i);
            End If
        End If
    Next i
End Sub


这段编程的简要思想是:

由外循环产生随机数,然后进入内循环,判断随机数是否与数组中已有元素重复,如果重复,就取消该次循环,再次进行内循环;如果不重复,就将这个符合条件的数赋值给对应的数组元素。最后,由外循环将符合条件的数在窗体上显示出来。

【二】

Option Explicit
Dim a(9) As Integer,j As Integer
 
Private Sub Form_Click()
    For i = 0 To 9
        a(i) = Int(Rnd() * 100 + 1)
        For j = 0 To i - 1
            If a(i) = a(j) Then
                i = i - 1
                Exit For
            End If
        Next j
    Next i
    For j = 0 To 9
        If j = 9 Then
            Print a(j); Chr(13)
        Else
            Print a(j),End If
    Next j
End Sub

这个编程是直接把生成随机数存进数组,然后再进行比较已经存在于数组中的每一个元素,判断有无相同的;而上一个算法是产生一个数,判断是否与数组里的元素存在重复现象,再将这个数存入数组。

当然,如果想生成更小或更大的随机数,则需要通过表达式实现,因为rnd函数产生的是【0,1)区间内的Single类型数据。如:

生成0x)区间的随机Singler类型数据,使用表达式rnd*x;

生成mn)区间的随机Singler类型数据,使用表达式m+rnd*(n-m)

生成mn】区间的随机整数,使用表达式m+int(rnd*(n-m+1))

之前也曾经做过这样的题,但太久没有做又不会了,这是什么原因呢?我想都是没有好好总结、没有脚踏实地地去做好每一件事情的原因。虽然当时照着源代码敲能实现出来,但没有自己去想、去实践,这都是自欺欺人的后果,还有待改善。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...