伊莉討論區

標題: 如何抽完號後進行第二輪 [打印本頁]

作者: fmp10273    時間: 2015-6-25 05:32 PM     標題: 如何抽完號後進行第二輪

本帖最後由 fmp10273 於 2015-6-26 09:32 AM 編輯

同上,最近要做類似範圍內抽號碼的程式..
  1. Dim x As Integer
  2.         Static I As Integer
  3.         Randomize()
  4.         I = I + 1
  5.         If TextBox2.Text = "" Then
  6.             MsgBox("請輸入參加人數")
  7.         Else
  8.             x = Int((Rnd() * TextBox2.Text)) + 1
  9.             Label1.Text = Str(x)
  10.             Label2.Text = I
  11.             TextBox1.Text &= Str(x) & vbCrLf
  12.         End If
複製代碼



抽出的號碼顯示在TextBox1裡...但抽出的號碼還要在做第二輪抽號..
如何從TextBox1裡的指定號碼再抽出裡面的隨機號?





作者: johnwanz    時間: 2015-6-26 11:18 AM

我個人的想法會是, 第一輪的結果作為Array或List, 第二輪抽號碼, 以index為範疇, 輸出時再將index套入第一輪的結果.
作者: fmp10273    時間: 2015-6-27 05:05 PM

本帖最後由 fmp10273 於 2015-6-29 05:57 PM 編輯

陣列是可以取前10個了..但陣列亂數就不知該怎樣用了
  1. Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
  2.         Dim a(100) As Integer
  3.         Dim r(100) As Integer
  4.         Dim i As Integer
  5.         Dim j As Integer
  6.         Randomize()
  7.         Dim t As Integer = TextBox2.Text
  8.         For i = 1 To t
  9.             a(i) = i
  10.         Next i
  11.         For i = t To 1 Step -1
  12.             j = Int(Rnd() * i) + 1
  13.             r(i) = a(j)
  14.             a(j) = a(i)
  15.         Next i
  16.         For i = 1 To t
  17.             TextBox1.Text &= r(i) & vbCrLf
  18.         Next i
  19.         For i = 1 To 50
  20.             myArray(i) = r(i)
  21.             TextBox4.Text &= myArray(i) & vbCrLf
  22.         Next
  23.     End Sub

  24.     Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
  25.         Dim i As Integer
  26.         Randomize()
  27.         For i = 1 To 10
  28.             myA(i) = myArray(i)
  29.             TextBox3.Text &= myA(i) & vbCrLf
  30.         Next
  31.     End Sub

  32.     Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
  33.         Dim a(10) As Integer
  34.         Dim r(10) As Integer
  35.         Dim i As Integer
  36.         Dim j As Integer
  37.         Dim k As String
  38.       
  39.         For i = 1 To 10
  40.             myA(i) = i
  41.         Next i
  42.         For i = 10 To 1 Step -1
  43.             j = Int(Rnd() * i) + 1
  44.             myA(i) = myA(j)
  45.             myA(j) = myA(i)
  46.         Next i
  47.         For i = 1 To 10
  48.             TextBox3.Text &= myA(i) & vbCrLf
  49.         Next i


  50.     End Sub
複製代碼

http://i.imgur.com/XWGxUeg.png
作者: rr09192084    時間: 2015-7-1 02:40 PM

本帖最後由 rr09192084 於 2015-7-1 02:45 PM 編輯
  1. Public Class Form1

  2.     REM 宣告三個System.Collections.ArrayList類別的容器來放置亂數號碼
  3.     Private arrayA As System.Collections.ArrayList = New System.Collections.ArrayList()
  4.     Private arrayB As System.Collections.ArrayList = New System.Collections.ArrayList()
  5.     Private arrayC As System.Collections.ArrayList = New System.Collections.ArrayList()

  6.     REM </summary>
  7.     REM 產生不重複的亂數
  8.     REM </summary>
  9.     REM <param name="intLower"></param>產生亂數的範圍下限
  10.     REM <param name="intUpper"></param>產生亂數的範圍上限
  11.     REM <param name="intNum"></param>產生亂數的數量
  12.     REM <param name="isSort"></param>是否排序,(這個參數可省略,預設值是否)
  13.     Private Function MakeRand(intLower As Integer, intUpper As Integer, _
  14.                               intNum As Integer, Optional isSort As Boolean = False) _
  15.                               As System.Collections.ArrayList
  16.         Dim arrayRand As New System.Collections.ArrayList()
  17.         Dim random As New System.Random()
  18.         Dim intRnd As Integer
  19.         While arrayRand.Count < intNum
  20.             intRnd = random.[Next](intLower, intUpper + 1)
  21.             If Not arrayRand.Contains(intRnd) Then
  22.                 arrayRand.Add(intRnd)
  23.             End If
  24.         End While
  25.         If isSort Then
  26.             arrayRand.Sort()
  27.         End If
  28.         Return arrayRand
  29.     End Function

  30.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  31.         REM <<<<<第一輪抽獎程式>>>>>

  32.         REM 先清空容器
  33.         arrayA.Clear()
  34.         arrayB.Clear()

  35.         REM 再從1到500號中抽出30個中獎號碼放到 arrarA 中
  36.         arrayA = MakeRand(1, 500, 30)

  37.         REM 清空文字框
  38.         TextBox1.Clear()
  39.         TextBox2.Clear()
  40.         TextBox3.Clear()

  41.         REM 因為 System.Collections.ArrayList 這個類別容器第一個元素索引是從 0 開始,所以 arrayA 的索引值要從 0 到 29
  42.         REM 我們之前取30個中獎號碼,所以arrayA.Count = 30,再減掉1就是29了
  43.         For i As Integer = 0 To arrayA.Count - 1
  44.             REM 把30個抽出的號碼放到TextBox1中
  45.             TextBox1.Text += CStr(arrayA.Item(i)) + vbCrLf
  46.             REM 再把前10個號碼分別放到 TextBox2 和 arrayB 中(這就是第一輪的中獎號碼)
  47.             If i < 10 Then
  48.                 TextBox2.Text += CStr(arrayA.Item(i)) + vbCrLf
  49.                 arrayB.Add(arrayA.Item(i))
  50.             End If
  51.         Next
  52.     End Sub

  53.     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  54.         REM <<<<<第二輪抽獎程式>>>>>

  55.         If arrayB.Count = 0 Then
  56.             REM 如果沒有第一輪抽獎,則第二輪抽獎無效
  57.             Return
  58.         End If

  59.         REM 先清空容器
  60.         arrayC.Clear()

  61.         REM 不要忘記 System.Collections.ArrayList 這個類別容器第一個元素索引是從 0 開始
  62.         REM 所以要從 0 到 arrayB.Count - 1 來取得 arrayB 索引值
  63.         REM 下面這一行程式就是從第一輪中獎號碼中再抽出3個第二輪中獎的序號
  64.         arrayC = MakeRand(0, arrayB.Count - 1, 3)

  65.         REM 清空文字框
  66.         TextBox3.Clear()

  67.         REM 把第二輪中獎的3個號碼放到 TextBox3 中
  68.         For i As Integer = 0 To arrayC.Count - 1
  69.             REM 利用剛剛抽出的 3 個序號從 arrayB 中取出 3 個號碼並放到 TextBox3 中
  70.             TextBox3.Text += CStr(arrayB.Item(CInt(arrayC.Item(i)))) + vbCrLf
  71.         Next
  72.     End Sub

  73. End Class
複製代碼
我個人建議應該把 "亂數" 這件事情單獨來處理
所以我參考網路上的範例改寫一個MakeRand函數
這個函數我不做註解
希望你可以自行參閱並且去了解它




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!