2013-06-03 110 views
0

請檢查下面我的代碼:隨機數不工作

Public Class tier1 

Dim rnd As New System.Random() 



Function build1(ByVal dt As DataTable) As String 
    Try 
     For i = 0 To 4 
      For ix As Integer = 0 To till Step 4 
       lstrn.Add(rnd.Next(ix, ix + 4)) 
      Next 

      Dim cntx As Integer = 0 

      For Each x As Integer In lstrn 
       If (i = 0) Then 
        If (article(x).Split(ChrW(10)).Length > 2) Then 
         If (article(x).Split(ChrW(10))(0).Length > 300) Then 
          first.Add(article(x).Split(ChrW(10))(0)) 
          cntx = cntx + 1 
          If (cntx = 25) Then 
           Exit For 
          End If 
         End If 
        End If 
       End If 


      lstrn.Clear() 
     Next 

     Dim fi as String = "{" 

     For dx As Integer = 0 To first.Count - 2 
      fi = fi & w.spinl(first(dx), "light") & "|" 
     Next 

     fi = fi & "}" 

     Return fi 
    Catch ex As Exception 

    End Try 

End Function 

End Class 

現在看到我的調用代碼:

Dim w As WaitCallback = New WaitCallback(AddressOf beginscn) 

For var As Integer = 1 To NumericUpDown1.Value 
      Dim param(1) As Object 
      param(0) = lst 
      param(1) = var 
      ThreadPool.QueueUserWorkItem(w, param) 
     Next 

sub 

sub beginscn() 
    Dim scntxt As String = t1.buildtier1(dt) 
end sub 

現在明白我想要什麼我給什麼。假設我傳遞一個數據表是這樣的:

1,abcd,34,5 
2,adfg,34,5 
3,fhjrt,34,5 
4,rtitk,34,5 

我要的是{ABCD | adfg | fhjrt | rtitk}這個順序應該是隨機的,每次。因爲我傳遞了50-100個值並且在25退出循環,所以每個輸出應該有{|}格式的25個字符串的不同序列,但它不能像那樣工作。每次我得到相同的序列。

任何人都可以解釋爲什麼它會這樣做,併爲這個問題的任何可能的解決方案?

注意:我已經在排隊之前嘗試了洗牌數據表,但仍然無效。

+1

很難明白你正在嘗試做的 –

+0

我不是一個VB.net程序員,但我的預感是你不隨機數種子設定成類似以毫秒爲單位的當前時間。在計算機中沒有真正的隨機數字這樣的東西,相反,它是一個數學函數,從這個種子開始給出一系列不相關的數字。如果您沒有設置種子,它將默認爲一個設定的數字,因此每次都會給出相同的序列。 – sradforth

+0

別忘了,隨機不是線程安全的。鎖定它。 –

回答