【问题标题】:Visual Basic - Looping an array 100 times not working?Visual Basic - 循环数组 100 次不起作用?
【发布时间】:2013-03-27 23:38:02
【问题描述】:

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

【问题讨论】:

    标签: vb.net


    【解决方案1】:

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

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

    最后,您不需要在每个循环中重新声明 rnd。类似的东西对我来说听起来更好:

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

    【讨论】:

      【解决方案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
      

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

      i = rnd.Next(0, 100000)
      

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

      【讨论】:

      • 我编辑了我的代码。它可以工作,但它只测试 0-99,999 之间的 1 个随机生成的数字。我仍然需要该程序来测试其他 99 个“数字”。另外,我应该为此使用数组,我以为我是,但我想我真的不知道数组是什么?我该如何处理数组?感谢您的帮助!
      • 所以您想生成 100 个随机数,然后检查每个数字中该数字数组中有多少位(从 0 到 9)?示例(23498, 98687 => 有 3 个数字 '8')
      【解决方案3】:

      我看到您没有将变量“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。检查一下,让我知道这是否能解决问题!

      【讨论】:

      • i++ // 将 i 的值增加 1,与 i = i + 1 相同 // 那行给了我很多错误,其中一部分应该是注释吗?我很困惑
      • 是的,在该行中,“//”表示 C# 中的注释 ...。很抱歉给您带来不便,这只是代码中的“i++”。
      • VB.NET 不支持++ 运算符,所以你必须写i += 1 而不是i++
      • @MarcinJuraszek 感谢您的澄清!我不经常使用 VB.NET。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      相关资源
      最近更新 更多