請檢查下面我的代碼:隨機數不工作
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個字符串的不同序列,但它不能像那樣工作。每次我得到相同的序列。
任何人都可以解釋爲什麼它會這樣做,併爲這個問題的任何可能的解決方案?
注意:我已經在排隊之前嘗試了洗牌數據表,但仍然無效。
很難明白你正在嘗試做的 –
我不是一個VB.net程序員,但我的預感是你不隨機數種子設定成類似以毫秒爲單位的當前時間。在計算機中沒有真正的隨機數字這樣的東西,相反,它是一個數學函數,從這個種子開始給出一系列不相關的數字。如果您沒有設置種子,它將默認爲一個設定的數字,因此每次都會給出相同的序列。 – sradforth
別忘了,隨機不是線程安全的。鎖定它。 –