VB小程序:生成十个不重复的随机数

我们通过随机数函数Rnd结合for循环嵌套来实现生成十个不重复的随机数,代码如下:

 

Option Explicit
Dim a(9) As Integer, i As Integer, j As Integer     ‘定义数组及循环变量
Dim Temp As Integer     ’定义一个临时变量存储生成的随机数
Dim Flag As Boolean      ‘定义一个布尔型变量来给数组元素做标记

 

Private Sub Form_Click()

Randomize     ’初始化随机数发生器

For i = 0 To 9     ’外循环,用来生成十个随机数和将满足条件的这是个随机数由If条件判断后输出

    Temp = Int(Rnd() * 100 + 1)     ‘生成一个随机数存放在Temp中
    Flag = False     ‘假设此时的判定重复标识Flag为False(不重复)
    
    For j = 0 To i - 1     ‘内循环,来筛选外循环生成的随机数是否跟已存入数组的任何一个元素重复
        If Temp = a(j) Then     

            i = i - 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     ‘这个If选择是我自己设计用来控制输出格式的


    End If
   
Next i

End Sub

 

这个代码总体的简要思想就是:


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

 

 以上代码和注释是自己的理解,如果有什么错误或是有需要改进的地方,大家不妨提出来。
 
PS:这里还推荐一个算法,代码如下:
Option Explicit
Dim a(9) As Integer, i 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) & Chr(10)
    Else
        Print a(j) & "  ";
    End If
Next j
End Sub
 
这个代码是直接把生成的随机数存进数组,然后再比较已经存在于数组中的每一个元素,判断有无相同的;
而上一个算法是产生一个数,判断是否与数组里的元素存在重复现象,再将这个数存入数组。
 
大家多交流!
 
                                                                                                                  13/02/18 19:32 于机房 40号

 

欢迎访问我的博客:http://151451325.blog.163.com/           http://blog.sina.com.cn/tonyliuchen


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章