2013-08-07 5 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 
Смежные вопросы