2013-08-07 75 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 
比較