随机找到1-12的数字而不重复

时间:2017-12-22 09:17:44

标签: vb.net random integer

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

<com.teleclinic.kabdo.smartmaterialedittext.CustomViews.SmartEditText
    android:id="@+id/emailSmartEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:setLabel="Email"
    app:setMandatoryErrorMsg="Mandatory field"
    app:setRegexErrorMsg="Wrong email format"
    app:setRegexType="EMAIL_VALIDATION" />

<com.teleclinic.kabdo.smartmaterialedittext.CustomViews.SmartEditText
    android:id="@+id/passwordSmartEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:setLabel="Password"
    app:setMandatoryErrorMsg="Mandatory field"
    app:setPasswordField="true"
    app:setRegexErrorMsg="Weak password"
    app:setRegexType="MEDIUM_PASSWORD_VALIDATION" />

<com.teleclinic.kabdo.smartmaterialedittext.CustomViews.SmartEditText
    android:id="@+id/ageSmartEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:setLabel="Age"
    app:setMandatory="false"
    app:setRegexErrorMsg="Is that really your age :D?"
    app:setRegexString=".*\\d.*" />

Randomize() number = Int(Rnd() * 12) + 1 AssignImagesToSquares() number2 = Int(Rnd() * 12) + 1 AssignImagesToSquares() number3 = Int(Rnd() * 12) + 1 AssignImagesToSquares() AssignImagesToSquares,我使用它们。 但是,我面临的问题是数字可以重复。我无法弄清楚如何做到这一点,但在psuedocode中,

Private Sub

我想过可能会使用一个循环来重复这个过程,直到找到一个匹配但是怎么做到这一点?

3 个答案:

答案 0 :(得分:2)

作为一个简单的解决方案,您可以使用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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

可能有点矫枉过正;)但是你可以为任意数量的数字扩展它:

        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数组中有您想要的随机不同数字。只需使用它们。