Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在Visual Basic中生成三个唯一的随机数?_Vb.net_Random - Fatal编程技术网

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

Vb.net 在Visual Basic中生成三个唯一的随机数?,vb.net,random,Vb.net,Random,我最近一直在开发一个可以显示三张随机照片的应用程序。表单由三个图片框和一个按钮组成。当用户单击按钮时,将显示三个不同的图像。然而,问题是,这三个图像并不总是唯一的,大多数情况下会出现双倍图像,通常也会出现三倍图像。我试图实现一个函数来捕捉这一点,但它成功地降低了出现相同图像的可能性。有50多张图片可供选择,所以还不够。以下是我提出的失败解决方案的代码: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As Syst

我最近一直在开发一个可以显示三张随机照片的应用程序。表单由三个图片框和一个按钮组成。当用户单击按钮时,将显示三个不同的图像。然而,问题是,这三个图像并不总是唯一的,大多数情况下会出现双倍图像,通常也会出现三倍图像。我试图实现一个函数来捕捉这一点,但它成功地降低了出现相同图像的可能性。有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%的时间内捕获双重或三重映像


任何帮助都将不胜感激,特别是如果解释得简单的话。谢谢。

我将生成随机图像1和图像2,使用while循环测试图像2是否不同。只有完成了这一步,我才能继续生成第三幅图像

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


这可能不是最有效的方法,但它是有效的

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

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))

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

这和你想象的不一样

        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
        If imagenumber1.Text = imagenumber3.Text or imagenumber2.Text = imagenumber3.Text Then
            RandomImageThree()
        End If