2013-08-07 71 views
0

我一直在研究一个应用程序,最近显示三张随机照片。该表格由三个图片框和一个按钮组成。当用户点击一个按钮时,会显示三个不同的图像。但问题是,这三个图像并不总是独一无二的,大多数情况下会出现双倍现象,而且经常会出现三倍。我试图实现一个功能来抓住这一点,但它所取得的成功是降低了相同图像的机会。有超过50个图像可供选择,所以它不是没有足够的。下面是失败的解决方案,我想出了代码(如:imagenumber1)在Visual Basic中生成三个唯一的随机数?

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”功能生成标签的随机数字,这些数字与50个图像之一的数量相关。我意识到这可能不是最聪明的方法,但我不熟悉任何其他方式。

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

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

回答

2

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

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