有很多关于此的帖子,但似乎没有人有我的问题。
我有一个带字母a-z的列表框(每个字母的行)
使用
Dim rancon As New Random
Dim rc As Integer = ListBox1.Items.Count
Label5.Text = lcon.Items.Item(rancon.Next(rc)).ToString
它正在做的就是随机选择,前7或8个字符中的1个。
任何人都可以提供建议吗?
答案 0 :(得分:1)
我认为你希望随机总是在ListBox
中选择一个不同的项目。因此,您必须重用相同的Random
实例,因为默认构造函数从当前系统时间派生种子(用于初始化伪随机数生成器)。
如果您非常快地调用此代码(例如在循环中),则种子将始终相同。因此,你会得到重复的数字/项目。
为避免这种情况,您可以在课程中将Random
作为字段:
Private rancon As New Random
Public Sub YourMethod()
Dim rc As Integer = ListBox1.Items.Count
Label5.Text = ListBox1.Items(rancon.Next(rc)).ToString()
End Sub
MSDN:
默认种子值是从系统时钟派生而且有限 解析度。结果,创建了不同的Random对象 通过调用默认构造函数来关闭连续 相同的默认种子值,因此会产生相同的 随机数集。使用单个可以避免此问题 随机对象生成所有随机数。你也可以解决 它通过修改系统时钟返回的种子值然后 明确地向Random(Int32)提供这个新的种子值 构造
请注意,如果是拼写错误,我还使用ListBox1.Items
代替lcon.Items
。