Do
Randomize
rn2 = Int(Rnd * n + 1)
Loop Until rn2 rn1: rn1 = rn2
可以幫我解釋最後一行的意思嗎?
Loop Until rn2 rn1: rn1 = rn2
2006-12-10 12:18:04 · 3 個解答 · 發問者 hf1134 4 in 電腦與網際網路 ➔ 程式設計
我現在程式有個問題
就是rn2的數值會重覆
那如果rn2遇到重覆的數值會重新抓新的數值一直到沒有重覆為止
那程式要怎麼改呀!
2006-12-10 16:26:46 · update #1
Private Sub Command1_Click()
Do
Randomize '令rnd所產生出來的數不會重覆
rn2 = Int(Rnd * n + 1) '這個值永遠都會等於1
Loop Until rn2 rn1: rn1 = rn2
'其實上面有一個分號的地方已經表示換行了~如下
Do
Randomize
rn2 = Int(Rnd * n + 1)
Loop Until rn2 rn1
rn1 = rn2
'程式解釋:
'上列程式為後測試迴圈~所以不論一開始
'rn1和rn2的值為何~都會無條件執行一次
'致於上列的最後一行(Loop Untilrn2rn1)
'是說假如rn2rn1的條件 " 不成立 " 時~
'繼續執行迴圈~當rn2跟rn1的值不一樣時,就跳出
'最後在令rn1的值等於rn2的值~
End Sub
'希望以上的解釋你能看的懂~希望能對你有幫助~^^~
2006-12-11 12:37:28 補充:
就改成陣列吧~
2006-12-11 12:37:49 補充:
Private Sub Command1_Click()
Dim rn2(100): q = 0
Dim flag As Boolean '偵測是否重複
Do
flag = False
q = q 1
rn2(q) = Int(Rnd * 100) 1
For i = 1 To q - 1
If rn2(q) = rn2(i) Then flag = True
Next i
Loop Until flag = False
End Sub
2006-12-11 12:40:18 補充:
flag就是用來測試是否有重複
用陣列的用意就是用來儲存出現過的數~
因為不知道你完整的問題~所以只能做到這樣~
如果有需要~可以在提出喔~^^~
改一下面的"q=q 1"
那個改成"q=q 1"
2006-12-11 12:41:41 補充:
不知道為什麼@@
"加號"打不出來...
上面的在最後改一次..." q = q 加 1 "
2006-12-10 13:05:52 · answer #1 · answered by 阿皓 2 · 0⤊ 0⤋
Do
Randomize ' 讓電腦預設的 "根" 值重新換過, 否則, 每次重新執行時, 所得的值的順序都會一樣
rn2 = Int(Rnd * n + 1) ' 產生一個 1 ~ n 的數(你必須要先定義 n, 否則 n 會預設為 0.)
' Loop Until rn2 rn1: rn1 = rn2
' 凡是看到冒號, 均可拆開到下一行
=>
Loop Until rn2 rn1 ' Do 到 Loop 之間的程式要一直做(至少做一次), 直到 rn2 不等於 rn1(你必須要先定義 rn1)
rn1 = rn2 ' 把 rn2 的值指定給 rn1
一般而言, 這個就是在預防產生相同的數...
例如, 要產生三個 1 ~ n 不同的數
Randomize
rn1 = Int(Rnd * n + 1) ' 第一數
Do
rn2 = Int(Rnd * n + 1)
Loop Until rn2 rn1 ' 第二數, 且不等於第一數
Do
rn3 = Int(Rnd * n + 1)
Loop Until (rn3 rn1) and (rn3 rn1) ' 第三數, 且不等於第一數, 第二數
2006-12-11 00:28:47 · answer #2 · answered by JJ 7 · 0⤊ 0⤋
我剛試了一下…
DO....LOOP 中間的東西就是要一直做...
那何時要停呢...就是...
Until rn2 rn1: rn1 = rn2
意是是說:當 rn2 不等於 rn1 時就不做了,而" : rn1 = rn2 "也就是當它不做的時候,把 rn2 的值給 rn1
所以…換個方法說就是....
當 rn2 rn1 時跳出迴圈,此時再把 rn2 的值給 rn1 ,因此最後 rn1=rn2
希望你懂
2006-12-10 13:00:41 · answer #3 · answered by Ansel 3 · 0⤊ 0⤋