这是一个学校项目,任务是创建一个随机数生成器,产生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
结束班
我试图回忆起我的功能,如果存在数字而产生另一个。
答案 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
谢谢!