Visual Basic - 循环数组100次不工作?

时间:2013-03-27 23:38:03

标签: vb.net

我正在尝试将此数组循环100次(从0-99,999获取一个数字)。我尝试过几种不同的运气方式。我已经设置好了你点击一个按钮就可以生成数组了。然后,用户将输入一个数字并点击另一个按钮,以检查该数字在100个数字组中出现的次数。有任何想法如何解决它?我被卡住了。

   Dim i As Integer
    Dim rnd As New Random()
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnter.Click


            Dim num As Integer
            If Int32.TryParse(txtEnter.Text, num) AndAlso num >= 0 AndAlso num < 10 Then
            lblNumber.Text = i.ToString()
            Dim counts = From c In i.ToString()
                         Group By c Into Group
                         Select DigitGroup = New With {.Count = Group.Count(), .Digit = c, .Group = Group}
                         Order By DigitGroup.Count Descending, DigitGroup.Digit
                Dim numCount = counts.FirstOrDefault(Function(grp) grp.Digit.ToString() = num.ToString())
                If numCount IsNot Nothing Then
                    Dim numMessage = String.Format("There are {0} number {1}'s found.", numCount.Count, num)
                    MessageBox.Show(numMessage)
                Else
                    MessageBox.Show("Your number does not contain a " & num)
                End If
            Else
                MessageBox.Show("Please enter a number between 0 and 9.")
            End If

    End Sub

    Private Sub btnGetNumber_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetNumber.Click
        btnEnter.Enabled = True


        i = 0
        Do Until i > 100
            Dim randomInt = rnd.Next(0, 100000)
            i = i + 1
            i = rnd.Next(0, 100000)
        Loop
    End Sub
End Class

3 个答案:

答案 0 :(得分:2)

New Random()移出该循环。将其设为全局并仅创建一次实例。

(随机生成器开始使用从当前时间获得的种子。在循环内声明一个随机变量会导致同一种子一次又一次地使用。这会返回相同的数字,从而破坏函数的随机性)就像:http://xkcd.com/221/

请参阅其他说明here

当然,如果你不增加用于控制循环的变量i,你将永远循环

Dim i As Integer
Dim rnd As New Random()

.....

i = 0
Do Until i > 100
    Dim randomInt = rnd.Next(0, 100000)
    i = i + 1
Loop

说,现在我不知道你在这里想做什么。没有要检查的数组,并且您不使用从随机生成器获得的值,只是,您的i变量以值101退出。
现在我只是猜测你的意图是什么,但也许你只想要这个?

i = rnd.Next(0, 100000)

这将为变量i提供一个随机数,后续代码会检查i中所需数字的数量

答案 1 :(得分:2)

首先,当您知道循环次数时,通常会使用For循环。

其次,你忘了在until循环中增加i

最后,您不需要在每个循环中重新声明rnd。这样的事情对我来说听起来更好:

Dim rnd As New Random()

For i = 1 To 100
    Dim randomInt = rnd.Next( 0 , 100000 )
Next

答案 2 :(得分:1)

我看到你没有添加变量“i”来增加:

i = 1
Do Until i > 100
        Dim rnd As New Random()
        Dim randomInt = rnd.Next(0, 100000)
        i+=1 'Increment value of i by 1, same as i = i + 1 
Loop

如果不增加,“i”的变量将始终为1。检查一下,让我知道是否能解决问题!