随机查找1-12中的数字,不重复[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机查找1-12中的数字,不重复[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有三个变量整数,我有以下代码随机化它们的值:
Randomize()
number = Int(Rnd() * 12) + 1
AssignImagesToSquares()
number2 = Int(Rnd() * 12) + 1
AssignImagesToSquares()
number3 = Int(Rnd() * 12) + 1
AssignImagesToSquares()
AssignImagesToSquares
是我使用它们的Private Sub
。但是,我面临的问题是数字可以重复。我无法弄清楚如何做到这一点,但在伪代码中,
'Randomize the integer "number"
'Randomize the integer "number2" where number2 <> number
'Randomize the integer "number3" where number3 <> number2 <> number.
我想过可能会使用一个循环来重复这个过程,直到找到一个匹配但是如何才能完成?
答案
作为一个简单的解决方案,您可以使用Do..Loop,直到数字不匹配为止
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
另一答案
是的,您可以使用循环,但是根据您的情况,您可以将值存储在数组中,并从此数组中获取值,并且只要从数组中选择一个值,就会将其删除。然后你可以再次使用它。提供简单的代码(当然它会更好地包装在一个函数中):
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) '
另一答案
可能有点矫枉过正;),但你可以扩展这个任意数量的数字:
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()
现在,yourNumbers数组中有你想要的随机不同数字。只需使用它们。
以上是关于随机查找1-12中的数字,不重复[重复]的主要内容,如果未能解决你的问题,请参考以下文章