从列表框中随机

时间:2014-10-10 15:18:45

标签: vb.net random

有很多关于此的帖子,但似乎没有人有我的问题。

我有一个带字母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个。

任何人都可以提供建议吗?

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