我有三个变量整数,我有以下代码随机化它们的值:
<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
我想过可能会使用一个循环来重复这个过程,直到找到一个匹配但是怎么做到这一点?
答案 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数组中有您想要的随机不同数字。只需使用它们。