【问题标题】:Visual Basic dividingVisual Basic 划分
【发布时间】:2017-06-18 19:56:58
【问题描述】:

我正在使用 Visual Basic,我正在阅读我老师写的一段代码,他有这么一大段代码:

 Private Sub btnDividing_Click(sender As Object, e As EventArgs) Handles btnDividing.Click
    Dim number As Integer = InputBox("Divide number by 2:")
    Dim result As Integer = 0

    Do While (number <> 0)
        result += 1 
        number = number - 2
    Loop
    MsgBox("The result is: " & result, MsgBoxStyle.Exclamation)

End Sub

所以我的老师输入了 result += 1number = number -2 我不太明白那部分所以我尝试通过将其更改为来简化它:

    Dim number As Integer = InputBox("Divide number by 2:")
    Dim result As Integer = 0

    Do While (number <> 0)
        result = number / 2
    Loop
    MsgBox("The result is: " & result, MsgBoxStyle.Exclamation)

End Sub

但我点击“确定”后它一直冻结

有什么建议吗?

【问题讨论】:

  • 注意:这不是 VBA,所以我编辑标签说它是 VB.Net。 (我很确定这是正确的。)
  • 作为旁注,我会推荐 Option Strict stackoverflow.com/documentation/vb.net/4022/option-strictDim number = Val(InputBox("Divide number by 2:")) 因为 InputBox 返回一个字符串
  • 有一个巨大的假设,即数字将是偶数。如果不是,它将是一个循环。也许老师的意思是 > 0 而不是 0。希望如此。
  • 你看不懂的那段代码算了2可以从number中被带走的次数(也写得不好)。假设您输入 6 作为数字。 Do..While..Loop 应该是 Do While (number &gt; 0)。假设您输入 6 作为数字,循环将检查 number 是否 >0。如果是,则将 1 添加到计数器 (result) 并从 number 中取出 2。所以现在number =4。循环再次检查该数字 > 0 是否将 1 添加到 result 并从 number 中获取 2。现在result=2 和number=2。再次循环,result=3 和 number=0. Because number 现在为 0,循环将退出。
  • 所以你的最终result 将=3,与6/2 相同。如果你用 5 尝试你老师的未更改代码,你将永远循环,因为number 将永远是 0。永远不等于 0。用笔和纸试试。

标签: vb.net visual-studio loops basic


【解决方案1】:

它冻结是因为你把它变成了一个无限循环:

Do While (number <> 0)
    result = number / 2
Loop

循环检查number 的值,但您在循环中修改的代码永远不会修改number 的值。因此,如果条件在第一次被检查时为真,它将永远为真。原代码修改了值:

Do While (number <> 0)
    result += 1 
    number = number - 2
Loop

由于number 在循环的每次迭代中递减2,它最终(假设它是偶数)等于0,使得循环条件为假,循环将结束。

基本上,循环需要以某种方式修改条件中检查的值(或有一些其他控制语句来退出循环),否则循环将无限运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 2017-09-18
    • 2014-11-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多