随机查找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中的数字,不重复[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按键精灵怎么随机生成1到12数字并且不重复

在vb中怎么随机产生不重复的数字

如何在C中的两个数字之间生成随机数? (内核)[重复]

如何从数组中的数字中找到最大和最小数字[重复]

VBS产生随机不重复的数字

求PHP语言随机自动生成不重复的数字