我试图用下面的代码片段生成一个独特的随机数生成器,但它不起作用.IF部分假设测试它是否是生成的第一个随机数,如果是,则假设将第一个随机数添加到ArrayList,如果它不是第一个随机数,则应该检查随机数是否已经在ArrayList中,如果它在它的猜想MSGBOX,并生成一个新的唯一的随机数,是不是已经在ArrayList中,并将它添加到ArrayList ArrayList中,但它没有做任何的那些.任何帮助将不胜感激.
Public Class Form1
Dim r As New Random
Dim dLowestVal As Integer = 1
Dim dHighestVal As Integer = 26
Dim dItemAmount As Integer = 1
Dim RollCheck As New HashSet(Of Integer)
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
End
End Sub
Private Sub btnRollDice_Click(sender As Object, e As EventArgs) Handles btnRollDice.Click
lblRandomNo.Text = r.Next(dLowestVal, dHighestVal)
lblItemAmount.Text = dItemAmount
If dItemAmount = 1 Then
RollCheck.Add(Val(lblRandomNo.Text))
ElseIf (RollCheck.Contains(Val(lblRandomNo.Text))) Then
MsgBox("Already Exists")
lblRandomNo.Text = r.Next(dLowestVal, dHighestVal)
RollCheck.Add(Val(lblRandomNo.Text))
End If
dItemAmount = dItemAmount + 1
Run Code Online (Sandbox Code Playgroud)
提前致谢.
您可以用这个简单的方法替换整个方法
' This is globally declared at the top of your form
Dim values As New List(Of Integer)
' This is called when you construct your form
' It will store consecutive integers from 1 to 25 (25 elements)
values = Enumerable.Range(1, 25).ToList()
Run Code Online (Sandbox Code Playgroud)
这是从您尚未使用的值中提取整数的方法
Private Sub Roll()
' Get an index in the values list
Dim v = r.Next(0, values.Count)
' insert the value at that index to your RollCheck HashSet
RollCheck.Add(values(v))
' Remove the found value from the values list, so the next call
' cannot retrieve it again.
values.Remove(values(v))
End Sub
Run Code Online (Sandbox Code Playgroud)
您可以通过这种方式从前一个事件处理程序中调用它
Private Sub btnRollDice_Click(sender As Object, e As EventArgs) Handles btnRollDice.Click
if values.Count = 0 Then
MessageBox("No more roll available")
else
Roll()
End Sub
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |