2

我试图循环这个数组 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
4

3 回答 3

2

移出New Random()该循环。使其成为全局并只创建一次实例。

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

在此处查看另一种解释

当然,如果你不增加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

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

i = rnd.Next(0, 100000)

这将为变量i提供一个随机数,您的后续代码将检查所需数字中有多少存在于i

于 2013-03-27T23:52:21.820 回答
2

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

其次,您忘记在 until 循环中增加 i

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

Dim rnd As New Random()

For i = 1 To 100
    Dim randomInt = rnd.Next( 0 , 100000 )
Next
于 2013-03-27T23:56:14.503 回答
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。检查一下,让我知道这是否能解决问题!

于 2013-03-27T23:52:30.243 回答