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


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