伊莉討論區
標題:
我如何在賓果的程式中再加一個25個號碼選一個好碼抽出且每次都不重覆
[打印本頁]
作者:
貞董
時間:
2017-4-23 06:00 AM
標題:
我如何在賓果的程式中再加一個25個號碼選一個好碼抽出且每次都不重覆
我如何在賓果的程式中再加一個25個號碼選一個好碼抽出且每次都不重覆
作者:
johnwanz
時間:
2017-4-26 10:26 AM
建立一個數字pool, 亂數取出一筆, 取出後就消失, 自然不會有重複.
作者:
tryit244178
時間:
2017-5-1 05:23 PM
本帖最後由 tryit244178 於 2017-5-10 04:31 PM 編輯
呃…編輯一下整個程式碼都噴掉了…
算了…宣告個陣列紀錄已經取出過的數字就行了
來補程式碼,先建立一個物件類別模組
'物件類別模組 Class1
Private bingoNumberLog(1 To 25) As Boolean
Public Sub Reset()
Dim i As Integer
For i = 1 To 25
bingoNumberLog(i) = False
Next i
End Sub
Public Function GetNumber() As Integer
Do
GetNumber = GetRndNumber(25)
Loop Until Not IsRepeat(GetNumber)
bingoNumberLog(GetNumber) = True
End Function
Private Function GetRndNumber(ByVal value As Integer) As Integer
Randomize
GetRndNumber = Int(Rnd() * value) + 1
End Function
Private Function IsRepeat(ByVal value As Integer) As Boolean
IsRepeat = False
If bingoNumberLog(value) = True Then IsRepeat = True
End Function
複製代碼
範例是這個。參考看看吧
'Demo
Private Sub CommandButton1_Click()
Dim i As Integer
Dim bingo As New Class1
bingo.Reset
TextBox1.Text = ""
For i = 1 To 25
TextBox1.Text = TextBox1.Text & bingo.GetNumber & " , "
Next i
End Sub
複製代碼
作者:
neqkwos1003
時間:
2017-12-6 06:25 AM
把25個數存入一個陣列a(25),將a(1)到a(25)打亂,再將a(1)到a(25)的數讀出,自然不重復!
作者:
羕漾
時間:
2017-12-7 02:25 AM
1. 土法練鋼法:
跑1個1~25的For迴圈,然後產生亂數後跑一個 While 去找這個數字是否使用過,如是,則繼續產生並繼續執行迴圈
此方法最大的圈點是可能會執行多次多餘的迴圈
2. 往後遞衍:
先定義25個 Slot ,再 Rnd 一個值看該 Slot 有沒有塞值了,有的話繼續往後遞衍,再將陣列從頭讀到尾就會是一個不重覆的亂數了!
3. 透過 LinkList 結構的串列
先產生 1~25 個數字到串列上
然後以亂數公式取值 (INT(Rnd*lst.Count)) ,取過的值就透過 Remove 來將值從該串列移除,這樣就不會取到重覆的值了!
(主要是透過 LinkList 可以動態的刪掉中間節點)
作者:
earnyting
時間:
2018-6-1 11:58 AM
早期我也是土法練鋼型。
把抽過的號碼比對一下之前抽出的號碼。
有抽過,系統就再抽。反正處理的速度很快,user 不會感覺得出來
不過還是建議用比較進階的方法處理啦。不然讓別人看到這種程式碼會被笑。XD
作者:
earnyting
時間:
2019-1-7 08:36 AM
不是在取數之前 加上Randomize Timer 就好了嗎?
為何要這麼辛苦?
歡迎光臨 伊莉討論區 (http://a04.eyny.com/)
Powered by Discuz!