2016-01-25 5 views
-2

Мне нужно написать цикл, который будет производить, чтобы сделать 4 уникальных номера. Таким образом, это было бы похоже на 4- 2 - 5 - 7, и это не может быть похоже на 4 - 4 - 5- 7, потому что 4 не уникальны. Это просто я борюсь с циклом Я пробовал цикл обучения на YouTube, но не знаю, может быть, если я увижу, что кто-то это сделает в этой концепции, я получу зависание, еслиКак создать эту программу?

+0

Смотрите мой ответ здесь (VBA) http://stackoverflow.com/questions/34862663/how -can-i-check-in-visual-basic-if-string-have-duplicate-symbols/34866579 # 34866579 – Jules

+0

Этот код вообще не помог –

+0

В вашем вопросе есть тег vba, этот ответ находится в формате vba. Вы можете изменить логику для работы в vb.net. – Jules

ответ

1

Я могу только предположить, что вам нужно 4 уникальных, случайных номера. При этом, как предположение, мы в первую очередь необходимо будет метод для генерации случайных чисел (заимствованные из https://stackoverflow.com/a/2677819/3579199):

Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer 
    Static Generator As System.Random = New System.Random() 
    Return Generator.Next(Min, Max) 
End Function 

Этот метод возвращает случайное число, которое> = Min и Max <. Теперь мы можем использовать этот метод для генерации 4, уникальных случайных чисел в цикле. В следующем примере, я буду считать, что вам нужно 4 цифры от 1 до 99 включительно:

Dim count = 0 
Dim numbers(3) As Integer 
Do 
    Dim randomNumber = GetRandom(1, 100) 
    If(Array.Exists(numbers, Function(element) 
            Return element.Equals(randomNumber) 
           End Function)) 
     Continue Do 
    End If 

    numbers(count) = randomNumber 
    count += 1 
Loop Until count = 4 
+0

Заявление «Этот метод вернет случайное число, которое = = Min и <= Max» неверно. Он должен прочитать «Этот метод вернет случайное число, которое равно = = и ** <** Макс.». – Enigmativity

+0

Это не компилируется сейчас. – Enigmativity

+0

Это было очищено и протестировано. Вероятно, мне следовало бы ответить с рабочим кодом, но я подумал, что дам ему куда-нибудь начать. – Patrick

2

Там очень простой способ, не прибегая к петлям.

Попробуйте этот код:

Dim rnd As System.Random = New System.Random() 
Dim numbers As Integer() = _ 
    Enumerable.Range(1, 10).OrderBy(Function (n) rnd.Next()).Take(4).ToArray() 

Я получаю такой результат с этим кодом:

8, 3, 2, 6

Вы можете изменить .Range(1, 10) к выберите любой диапазон номеров, который вам нравится, и .Take(4), чтобы брать только столько чисел, сколько хотите.


Если вы хотите сделать это с петлей, то здесь довольно эффективный способ:

Dim rnd As System.Random = New System.Random() 
Dim pallet As New List(Of Integer) 
For i = 1 To 10 
    pallet.Add(i) 
Next 
Dim selected = New List(Of Integer)() 
For i = 0 To 3 
    Dim j = rnd.Next(0, pallet.Count) 
    selected.Add(pallet(j)) 
    pallet.RemoveAt(j) 
Next 
Смежные вопросы