在Visual Basic中生成三个唯一的随机数?

时间:2013-08-07 11:43:02

标签: vb.net random

我最近一直在开发一款可以显示三张随机照片的应用。表单由三个图片框和一个按钮组成。当用户单击按钮时,将显示三个不同的图像。然而问题是,这三个图像并不总是唯一的,大多数时候会有双打,而且往往也是三倍。我试图实现一个函数来捕获它,但它成功的是降低相同图像的机会。有超过50个图像可供选择,所以它不是没有足够的。以下是我提出的失败解决方案的代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            RandomImageOne()
            RandomImageTwo()
            RandomImageThree()

            If imagenumber1.Text or imagenumber2.Text = imagenumber3.Text Then
                RandomImageThree()
            End If

            If imagenumber1.Text or imagenumber3.Text = imagenumber2.Text Then
                RandomImageTwo()
            End If


            If imagenumber3.Text or imagenumber2.Text = imagenumber1.Text Then
                RandomImageOne()
            End If

End Sub

'RandomImage'函数在标签中生成随机数(例如imagenumber1),这些数字与50个图像中的一个图像的数量相关联。我意识到这可能不是最聪明的方法,但我不熟悉任何其他方式。

我需要能够生成三个唯一的数字,这样我就不必担心编程会停止双重和三重图像,或创建一个100%的时间来捕获双重图像的解决方案或三重图像。

非常感谢任何帮助,特别是如果简单解释的话。谢谢。

3 个答案:

答案 0 :(得分:2)

我会生成随机图像1和图像2,使用while循环测试图像2是不同的。只有完成后,我才会继续生成图像三。

Information on the while loop is here

所以在粗略的代码中(因为我正确地使用了VBA,已经有一段时间了):

RandomImageOne()
RandomImageTwo()

do while imagenumber1.text = imagenumber2.text
    RandomImageTwo()
loop

RandomImageThree()

do while imagenumber3.text = imagenumber2.text or imagenumber3.text = imagenumber1.text
    RandomImageThree()
loop

答案 1 :(得分:0)

它可能不是最有效的方式,但它有效...

首先创建一个返回三个项目列表的函数:

Public Function ProvideUniqueNumbers(NoList As List(Of Integer), _
                                          HowManyToReturn As Integer) As List(Of Integer)
    Dim Generator As System.Random = New System.Random()
    Dim n As Integer = NoList.Count
    Dim index As Integer = Generator.Next(1, n)
    Dim ReturnList As List(Of Integer) = New List(Of Integer)
    For i = 1 To HowManyToReturn
        n = NoList.Count
        index = Generator.Next(1, n)
        ReturnList.Add(NoList(index))
        NoList.RemoveAt(index)

        'NoList.Dump()
    Next
    Return ReturnList
End Function

然后为您的集合创建一个整数列表。例如:

List(Of Integer) MyList = New List(Of Integer)
For i As Integer = 0 To YourImageArray.Count - 1
    MyList.Add(i)
Next

最后调用函数并分发结果:

Dim result As List(Of Integer) = ProvideUniqueNumbers(MyList,3)
image1 = YourImageArray(result(0))
image2 = YourImageArray(result(1))
image3 = YourImageArray(result(2))

答案 2 :(得分:0)

这不是一个解决方案,而是一个注释。

这不符合你的想法

        If imagenumber1.Text or imagenumber2.Text = imagenumber3.Text Then
            RandomImageThree()
        End If

你必须比较每个元素

        If imagenumber1.Text = imagenumber3.Text or imagenumber2.Text = imagenumber3.Text Then
            RandomImageThree()
        End If