VB.NET随机唯一生成器

use*_*583 1 vb.net

我试图用下面的代码片段生成一个独特的随机数生成器,但它不起作用.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)

提前致谢.

Ste*_*eve 6

您可以用这个简单的方法替换整个方法

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