? 發問時間: 電腦與網際網路程式設計 · 1 0 年前

請vb達人幫我翻譯這些程式碼

Dim chk As Boolean

Dim num%(16), i%, j%

For i = 1 To 16

chk = True

Do While chk

Randomize()

num(i) = Int(Rnd() * 16) + 1

chk = False

For j = 1 To i - 1

If num(i) = num(j) Then chk = True : Exit For

Next j

Loop

Next i

1 個解答

評分
  • 振輔
    Lv 5
    1 0 年前
    最佳解答

    Dim chk As Boolean

    '宣告chk為一個布爾運算變數, true/false=真/偽

    Dim num%(16), i%, j%

    '宣告 num陣列, i, j兩個變數

    For i = 1 To 16

    ' 啟動一個迴圈 i的值從1到16

    chk = True

    'chk目前的值=真

    Do While chk

    '當chk=真, 則繼續以下的在Loop以前的指令行, 直到chk=假

    Randomize()

    '重新啟動亂數, 這裡不執行, 底下的rnd()會永遠都是同一種值

    num(i) = Int(Rnd() * 16) + 1

    'num(i)=隨機產生的亂數(從1到16的任意1個整數)給目前i對應的陣列, i 的值來自於迴圈遞迴, 從1直到16

    chk = False

    'chk=假

    For j = 1 To i - 1

    '定義迴圈j從1到i-1, (i=1,j=1 to 0至少跑1次),...( i=16, j=1 to 15)

    If num(i) = num(j) Then chk = True : Exit For

    '如果num(i)這個目前的i的新變數的數字曾出現在前面1到i-1的話,

    '就繼續隨機產生新的變數直到這個變數不曾出現在前面為止

    Next j

    '迴圈的下一個j值

    Loop

    '繼續隨機產生新的變數直到這個變數不曾出現在前面為止

    Next i

    '跑完16個陣列的值

    '這個題目應該是使用亂數器,

    '將1-16的數字隨機亂排,就像是撲克牌洗牌

    '陸續隨機產生後面出現的數字, 但必須與已經產生的不同,

    '以達到1-16的號碼出現在不同順序的目的

    '但是這樣的洗牌法其實不太好, 除了閱讀性不佳, 還有效能掌控性問題

    參考資料:
還有問題?馬上發問,尋求解答。