我想制作一个随机数发生器。这是学校的家庭作业。我似乎无法让它发挥作用。
任务是制作一个随机数生成器,在20个文本框中生成20个数字,以询问10个数学问题。
它需要尽可能高效。我需要帮助,因为我只能这样做,但它真的效率低,而且代码很长。
Dim RandomNumberAHigh As Integer = 12 'Here I am declaring my highest number for the random number generator to use. This will be the highest number the maths quiz will ask the students in the questions.
Dim RandomNumberALow As Integer = 1 'Here I am declaring my lowest number for the random number generator to use. This will be the lowest number the maths quiz will ask the students in the questions.
Dim Random As Integer = 0 'Her I am declaring a variable that will be used to insert the numbers from the random number generator in the quiz text boxes.
Randomize()
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd1.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd4.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd7.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd10.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd13.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd16.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd19.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd22.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd25.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd28.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd3.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd6.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd9.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd12.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd15.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd18.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd21.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd24.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd27.Text = (Random)
Random = Int((RandomNumberAHigh - RandomNumberALow + 1) * Rnd() + RandomNumberALow)
Rnd30.Text = (Random)
答案 0 :(得分:0)
“高效”是非常主观的。有许多方法:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RandomizeTextBoxes(1, 12)
End Sub
Private Sub RandomizeTextBoxes(ByVal Low As Integer, ByVal High As Integer)
Static R As New Random
For i As Integer = 1 To 30
Dim matches() As Control = Me.Controls.Find("Rnd" & i, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is TextBox Then
DirectCast(matches(0), TextBox).Text = R.Next(Low, High + 1)
End If
Next
End Sub
答案 1 :(得分:0)
与@ Idle_Mind的答案一样,它使用Textbox的Name属性来确定是否应该为Text Property分配一个生成的值。
这里的不同之处在于我通过控件集合进行枚举;在For Each循环中使用IEnumerable。通过这种方式,我不必检查控件集合,控制集合的长度,或者在循环处理中转换控件。
Sub RandomizeTextBoxes(min As Integer, max As Integer)
Dim r As Random = New Random()
Dim RandomTextboxes As IEnumerable(Of TextBox) = Me.Controls.OfType(Of TextBox).Where(AddressOf DoesTextboxNameContainRnd)
For Each tbControl As TextBox In RandomTextboxes
tbControl.Text = r.Next(min, max)
Next
End Sub
Function DoesTextboxNameContainRnd(tbControl As TextBox) As Boolean
Return tbControl.Name.Contains("Rnd")
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RandomizeTextBoxes(1, 50)
End Sub