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) '