我最近一直在开发一款可以显示三张随机照片的应用。表单由三个图片框和一个按钮组成。当用户单击按钮时,将显示三个不同的图像。然而问题是,这三个图像并不总是唯一的,大多数时候会有双打,而且往往也是三倍。我试图实现一个函数来捕获它,但它成功的是降低相同图像的机会。有超过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%的时间来捕获双重图像的解决方案或三重图像。
非常感谢任何帮助,特别是如果简单解释的话。谢谢。
答案 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