Vb.net 随机查找1-12之间的数字,不重复

Vb.net 随机查找1-12之间的数字,不重复,vb.net,random,integer,Vb.net,Random,Integer,我有三个变量整数,下面的代码将它们的值随机化: Randomize() number = Int(Rnd() * 12) + 1 AssignImagesToSquares() number2 = Int(Rnd() * 12) + 1 AssignImagesToSquares() number3 = Int(Rnd() * 12) + 1 AssignImagesToSquares() 而AssignImagesToSquares是我使

我有三个变量整数,下面的代码将它们的值随机化:

Randomize()

    number = Int(Rnd() * 12) + 1
    AssignImagesToSquares()

    number2 = Int(Rnd() * 12) + 1
    AssignImagesToSquares()

    number3 = Int(Rnd() * 12) + 1
    AssignImagesToSquares()
AssignImagesToSquares
是我使用它们的
私有子文件。
然而,我面临的问题是,数字是可以重复的。我不知道怎么做,但在psuedocode中

'Randomize the integer "number"

'Randomize the integer "number2" where number2 <> number

'Randomize the integer "number3" where number3 <> number2 <> number.
“将整数“数字”随机化”
'将整数“number2”随机化,其中number2为数字
'将整数“number3”随机化,其中number3 number2为数字。

我考虑过使用循环来重复这个过程,直到找到匹配项为止,但是如何才能做到这一点呢?

作为一个简单的解决方案,您可以使用Do..循环,直到数字不匹配为止,例如

    Randomize()

    number = Int(Rnd() * 12) + 1
    AssignImagesToSquares()

    Do
        number2 = Int(Rnd() * 12) + 1
        If number2 <> number Then
            AssignImagesToSquares()
            Exit Do
        End If
    Loop

    Do
        number3 = Int(Rnd() * 12) + 1
        If number3 <> number AndAlso number3 <> number2 Then
            AssignImagesToSquares()
            Exit Do
        End If
    Loop
Randomize()
数字=整数(Rnd()*12)+1
分配图像平方()
做
数字2=Int(Rnd()*12)+1
如果是数字2,那么
分配图像平方()
退出Do
如果结束
环
做
number3=Int(Rnd()*12)+1
如果3号和3号都是2号,那么
分配图像平方()
退出Do
如果结束
环
可能有点过火;),但您可以将其扩展到所需的任意数量的数字:

        Dim temp As New ConcurrentDictionary(Of Integer, Integer)

        Dim count_actual As Integer = 0
        Dim count_wanted As Integer = 3

        Do
            Dim number = Int(Rnd() * 12) + 1            'or whatever random function
            If temp.TryAdd(number, count_actual) Then
                count_actual += 1
            End If
        Loop While count_actual < count_wanted

        Dim yourNumbers = temp.OrderBy(Function(v) v.Value).Select(Of Integer)(Function(v) v.Key).ToArray()
Dim temp作为新的ConcurrentDictionary(整型,整型)
Dim count_实际值为整数=0
需要的Dim count_为整数=3
做
Dim number=Int(Rnd()*12)+1'或任意随机函数
如果温度TryAdd(数字、计数和实际值),则
计数\u实际值+=1
如果结束
在实际计数<需要计数时循环
Dim yourNumbers=temp.OrderBy(函数(v)v.Value)。选择(整型)(函数(v)v.Key)。ToArray()

现在在yourNumbers数组中有您想要的随机不同的数字。只需使用它们。

是的,您可以使用循环,但根据您的情况,您也可以将值存储在数组中,并从此数组中获取值,一旦从数组中选择值,就可以将其删除。然后你可以再次使用它。提供了简单的代码(当然最好用函数包装):

     Dim number1, number2, number3 as Integer
     Dim numbers = New Integer() {1,2,3,4,5,6,7,8,9,10,11,12}

     Dim indx As Integer = Int(Rnd() * numbers.Length)
     number1=numbers(indx)
     Console.WriteLine(number1)
     System.Array.Clear(numbers, indx, 1)

     indx=Int(Rnd() * numbers.Length) 'wrap in function
     number2=numbers(indx)  '
     Console.WriteLine(number2) 'AssignImagesToSquares()
     System.Array.Clear(numbers, indx, 1) '