好吧,我一整天都在做这个……我被困住了。我是否只是错过了一些不允许我强制随机函数以确保它在再次循环列表之前遍历列表的东西?问题是它有时会连续显示相同的项目。所以我的目标是获得一个类似“itunes”的功能,它确保当它随机播放时,它不会击中已经“显示”的项目。
我当前的代码:
Dim rng As New System.Random()
Dim RAND(16) As String
RAND(0) = "A"
RAND(1) = "B"
RAND(2) = "C"
RAND(3) = "D"
RAND(4) = "E"
RAND(5) = "F"
RAND(6) = "G"
RAND(7) = "H"
RAND(8) = "I"
RAND(9) = "J"
RAND(10) = "K"
RAND(11) = "L"
RAND(12) = "M"
RAND(13) = "N"
RAND(14) = "O"
RAND(15) = "P"
RAND(16) = "Q"
If TextBox1.Text = 'Current Text
Then
TextBox1.Text = ("""" & RAND(rng.Next(RAND.Count())) & """")
End If
最佳答案
随机数不是这样工作的。真正的随机序列中有重复的数字。 Random
类有时会返回重复的数字。
为了满足您的要求,您必须跟踪已经使用过的内容,并且不要再次使用它们。
或者更好的是,不必从列表中删除项目,只需随机选择任意两个项目并交换它们即可。执行此操作一定次数,例如 100 次。然后通过调用 String.Join("", RAND) 构建字符串。像这样(未经测试,但这应该给你正确的想法):
Dim rng As New System.Random()
Dim RAND(16) As String
' Initialize your array -- this is shorter than your code,
' but does the same thing
For i As Integer = 0 to RAND.Length-1
RAND(i) = Chr(i+65)
Next
' Pick two random characters and swap them. Do this 100 times.
For i As Integer = 1 to 100
Dim first As Integer = rng.Next(RAND.Length)
Dim second As Integer = rng.Next(RAND.Length)
Dim temp = RAND(first)
RAND(first) = RAND(second)
RAND(second) = temp
Next
TextBox1.Text = String.Join("", RAND)
关于vb.net - 随机文本列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21053399/