想从数组列表中选择一个随机数

时间:2013-02-04 16:36:54

标签: vb.net arraylist

必须从arraylist中选择一个随机数,从数据库中生成适当的信息,此时它在rnd线上的窃听

    Dim rn As New List(Of Integer)
    Dim QPass As String
    rn.Add(71)
    rn.Add(72)
    rn.Add(79)
    rn.Add(80)
    Dim index As Integer = CInt(Math.Floor(Rnd() * 4))
    Dim randomValue As Integer = CInt(rn(index))
    QPass = randomValue.ToString()
    Session("Pt2") = rn
    PT2imgImage.ImageUrl = "showImage.ashx?i=" + QPass
    PT2imgImage.Width = Unit.Pixel(600)

2 个答案:

答案 0 :(得分:3)

下面

rn = rn(Rnd() * 4)

您正在尝试将一个Integer(从ArrayList中选择的值)放入声明为ArrayList的变量中。那不行。使用新变量:

Dim index As Integer = CInt(Math.Floor(Rnd() * 4))
Dim randomValue As Integer = CInt(rn(index))

QPass = randomValue.ToString()
Session("Pt2") = randomValue

CInt(Math.Floor(...))确保从Rnd() * 4返回的浮点值正确向下舍入并转换为整数,然后可以将其用于索引数组列表。最终,您可能希望通过更多.NET方式替换它以获取随机数(例如Random.Next)。 Rnd主要用于向后兼容。

CInt周围rn(index)是必需的,因为您使用旧的无类型ArrayList而不是新的,有光泽的强类型List(Of Integer)。如果您使用后者,则可以删除外部CInt

答案 1 :(得分:2)

    Dim rn As New List(Of Integer)
    Dim QPass As String
    Dim rnd As New Random
    rn.Add(7)
    rn.Add(8)
    rn.Add(15)
    rn.Add(16)
    Dim randomValue As Integer = rn(Rnd.Next(0, 4))
    QPass = randomValue.ToString()

我想我会按照建议使用更新的风格