随机数检查数组是唯一的

时间:2016-12-02 23:52:50

标签: arrays vb.net

这是一个学校项目,任务是创建一个随机数生成器,产生6个结果(数字),这些数字必须存储到一个数组中,一旦数字被选中一个按钮然后使用冒泡排序按升序对它们进行排序。

我遇到的问题是,我在我的阵列中得到重复的数字,但我已设法完成其余的要求。

Public Class Form1
Dim pickedNumbers(5) As Integer

Private Function getRandomNumber()
    Randomize()
    Dim randomNumber As Integer = CInt(Int((59 * Rnd()) + 1))
    If pickedNumbers.Contains(randomNumber) Then
        getRandomNumber()
    End If
    Return randomNumber
End Function

Private Sub addNumbers()
    For i = 0 To 5
        pickedNumbers(i) = getRandomNumber()
    Next
    outputNumbers()
End Sub

Private Sub sortNumbers()
    Dim Temp As Integer
    For i = 5 To 1 Step -1
        For k = 0 To i - 1
            If pickedNumbers(k) > pickedNumbers(k + 1) Then
                Temp = pickedNumbers(k)
                pickedNumbers(k) = pickedNumbers(k + 1)
                pickedNumbers(k + 1) = Temp
            End If
        Next
    Next
    outputNumbers()
End Sub

Private Sub outputNumbers()
    tb1.Text = pickedNumbers(0)
    tb2.Text = pickedNumbers(1)
    tb3.Text = pickedNumbers(2)
    tb4.Text = pickedNumbers(3)
    tb5.Text = pickedNumbers(4)
    tb6.Text = pickedNumbers(5)
End Sub

Private Sub btnPickNumbers_Click(sender As System.Object, e As System.EventArgs) Handles btnPickNumbers.Click
    addNumbers()
End Sub

Private Sub btnSortOrder_Click(sender As Object, e As EventArgs) Handles btnSortOrder.Click
    sortNumbers()
End Sub

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    For Each ctrl As Control In Me.Controls
        If TypeOf ctrl Is TextBox Then
            ctrl.Text = ""
        End If
    Next
End Sub

结束班

我试图回忆起我的功能,如果存在数字而产生另一个。

2 个答案:

答案 0 :(得分:0)

您应该只在程序中调用一次Randomize()。

当你调用Randomize()时,你正在播种一个随机数序列。它并不是随机的。它是伪随机确定性序列。对于任何给定的种子,序列将始终相同。

当没有参数调用Randomize()时,它使用Timer()函数为序列播种。 Timer()函数的分辨率仅为一秒。如果每秒调用一次不带参数的Randomize(),则每次调用都会将序列重置为第一个伪随机数。

每次调用getRandomNumber()函数时,都在调用Randomize(),这种情况发生在一个紧密的循环中,毫无疑问需要不到一秒的时间来执行。

答案 1 :(得分:0)

根据@VisualVincent提供的建议,我找到了答案。

    Private Function getRandomNumber()
        Return CInt(Int((59 * Rnd()) + 1))
    End Function

    Private Sub addNumbers()
        Dim randomNumber As Integer
        For i = 0 To 5
            randomNumber = getRandomNumber()
            While Not pickedNumbers.Contains(randomNumber)
                pickedNumbers(i) = randomNumber
            End While
        Next
        outputNumbers()
    End Sub

谢谢!