Visual Basic - 基于现有数字列表的随机数
Visual Basic - Random Number based on existing list of Numbers
目前我有下面的代码。它逐行读取文件 db.lcz 并将每个结果作为一个项目放入数组中。
在 db.lcz 中,我每行都有一个 10 位数字,我想根据所述文件中的现有数字获得一个新的随机数。
--
欢迎提出任何想法,我已经尝试了一些选项,例如 for 循环等,但我总是迷路。我知道我必须在概率方面相互检查每个字符值,但我不确定如何继续。感谢所有帮助。
谢谢!
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim lines() As String = IO.File.ReadAllLines("db.lcz")
Dim codeArray As New ArrayList()
For x As Integer = 0 To lines.GetUpperBound(0)
codeArray.Add(lines(x))
Next
For x = 0 To codeArray.Count - 1
MsgBox(codeArray.Item(x))
Next
Dim rng As New Random
Dim number As Integer = rng.Next(1, 1000000000) 'Test.GenerateDigits(rng, 9)
Dim digits As String = number.ToString("0000000000")
MsgBox(digits)
End Sub
Private Shared Function GenerateDigits(ByVal rng As Random, _
ByVal length As Integer) As String
Dim chArray As Char() = New Char(length - 1) {}
Dim i As Integer
For i = 0 To length - 1
chArray(i) = Convert.ToChar(rng.Next(10) + &H30)
Next i
Return New String(chArray)
End Function
您可以使用随机播放功能对数字进行随机重新排序,并使用索引数组。
s = "1234567890"
s1 = ""
ix = shuffle(s.Length - 1)
For i As Integer = 0 To s.Length - 1
s1 &= s(ix(i))
Next i
shuffle 函数可以类似这样:
Function shuffle(ByVal ncards As Integer) As List(Of Integer)
Dim rand As New Random
Dim ix As New List(Of Integer)
Dim k, n, tmp As Integer
For i as integer = 0 To ncards
ix.Add(i)
Next i
n = ncards
For i as integer = ncards To 1 Step -1
k = rand.Next(1, n + 1)
tmp = ix(i)
ix(i) = ix(k)
ix(k) = tmp
Next i
Return ix
End Function
目前我有下面的代码。它逐行读取文件 db.lcz 并将每个结果作为一个项目放入数组中。
在 db.lcz 中,我每行都有一个 10 位数字,我想根据所述文件中的现有数字获得一个新的随机数。
--
欢迎提出任何想法,我已经尝试了一些选项,例如 for 循环等,但我总是迷路。我知道我必须在概率方面相互检查每个字符值,但我不确定如何继续。感谢所有帮助。
谢谢!
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim lines() As String = IO.File.ReadAllLines("db.lcz")
Dim codeArray As New ArrayList()
For x As Integer = 0 To lines.GetUpperBound(0)
codeArray.Add(lines(x))
Next
For x = 0 To codeArray.Count - 1
MsgBox(codeArray.Item(x))
Next
Dim rng As New Random
Dim number As Integer = rng.Next(1, 1000000000) 'Test.GenerateDigits(rng, 9)
Dim digits As String = number.ToString("0000000000")
MsgBox(digits)
End Sub
Private Shared Function GenerateDigits(ByVal rng As Random, _
ByVal length As Integer) As String
Dim chArray As Char() = New Char(length - 1) {}
Dim i As Integer
For i = 0 To length - 1
chArray(i) = Convert.ToChar(rng.Next(10) + &H30)
Next i
Return New String(chArray)
End Function
您可以使用随机播放功能对数字进行随机重新排序,并使用索引数组。
s = "1234567890"
s1 = ""
ix = shuffle(s.Length - 1)
For i As Integer = 0 To s.Length - 1
s1 &= s(ix(i))
Next i
shuffle 函数可以类似这样:
Function shuffle(ByVal ncards As Integer) As List(Of Integer)
Dim rand As New Random
Dim ix As New List(Of Integer)
Dim k, n, tmp As Integer
For i as integer = 0 To ncards
ix.Add(i)
Next i
n = ncards
For i as integer = ncards To 1 Step -1
k = rand.Next(1, n + 1)
tmp = ix(i)
ix(i) = ix(k)
ix(k) = tmp
Next i
Return ix
End Function