0

我最近一直在开发一个显示三张随机照片的应用程序。该表单由三个图片框和一个按钮组成。当用户单击一个按钮时,会显示三个不同的图像。然而,问题是,这三个图像并不总是唯一的,大多数时候会有双倍的,而且通常也会有三倍的。我试图实现一个函数来捕捉这一点,但它成功的只是降低了相同图像的机会。有 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% 工作的解决方案来捕捉双图像或三图像.

任何帮助将不胜感激,特别是如果它被简单地解释。谢谢你。

4

3 回答 3

2

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

关于 while 循环的信息在这里

所以在粗略的代码中(自从我正确使用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
于 2013-08-07T11:59:40.597 回答
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))
于 2013-08-07T12:05:31.590 回答
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
于 2013-08-07T13:22:50.120 回答