另一个 Bug:仍然有错误

更新:2007 年 11 月

在本课中,您将学习如何查找仅在特定情况下出现的逻辑错误。

在上一课 嘿!不应那样做!找出逻辑错误 中,您学习了如何查找并修复逻辑错误。在该课的示例代码中,仍隐藏着一个严重的 Bug。由于该 Bug 仅在特定的情况下出现,因此找到它比较困难。

测试程序

作为一个程序员,当您开始测试您的程序以检查它是否按照您所希望的方式运行时,您处于不利的位置。这是因为,您知道程序会如何运行,所以不太可能犯错误,而正是那些错误有可能暴露出逻辑错误。而用户对您的程序不熟悉,所以他们可能并且会做出让您意想不到的事情。

例如,在一个程序中,通过用英里数除以旅行所用的小时数来计算每小时的英里数。如果用户在小时数或英里数中输入零会出现什么情况呢?让我们试试看。

试一试!

测试程序

  1. 打开在上一课 嘿!不应那样做!找出逻辑错误 中创建的 LogicErrors 项目。

    说明:

    如果您没有完成或保存前面的项目,您需要返回并完成它,然后才能继续。

  2. 按 F5 运行程序。在第一个文本框中输入 0(表示分钟数),在第二个文本框中输入 5(表示英里数),然后单击“Button1”。

    出现一个消息框,其中显示消息“平均速度无限”。

    将项目保持为打开状态——在下一个过程中,您将学习如何查找逻辑错误。

5 除以 0 = 无限?

在上一步骤中,“无限”可能并不是您想得到的,但在数学上这是正确的——5 可以无限次地被 0 除。但是,这个结果不是您希望用户从程序中看到的。您能想到一个方法防止此类事件发生吗?

您可能会想到添加一个错误处理程序,这一过程您在 出错时怎么办:处理错误 课中已经学习过。然而,在本例中这一方法不会奏效——因为结果“无限”并不是一个错误;而只不过不是您想要的结果而已。

因为显示速度为零可能没什么用处,所以解决这个问题的一种方法是测试出零值,然后警告用户必须输入一个更大的数字。在这一点上,您可能还需要防止用户输入负数,因为负数也会产生错误的结果。

在下一步骤中,您将修改 Button1_Click 事件处理程序中的代码,使得仅当值大于零时才调用 GetMPH 函数。

试一试!

修正 bug

  1. 在“代码编辑器”中,按如下所示更改 Button1_Click 事件处理程序中的代码:

    Dim minutes As Integer = CInt(Textbox1.Text)
    Dim miles As Double = CDbl(Textbox2.Text)
    Dim hours As Double = 0
    If minutes <= 0 Or miles <= 0 Then
      MsgBox("Please enter a number greater than zero")
    Else
      hours = minutes / 60
      MsgBox("Average speed " & GetMPH(miles, hours))
    End If
    
  2. 按 F5 再次运行程序。在第一个文本框中输入 0,在第二个文本框中输入 5。然后单击“Button1”。

    您将看到消息框指示您输入一个大于 0 的数字。请试着使用其他的数字组合来测试您的程序,直到您对 bug 修复的结果满意为止。

后续步骤

在本课中,您学习了如何查找并修复一个导致意外行为的逻辑错误。在下一课中,您将学习如何在代码中使用注释。

下一课:在程序中进行注释:使用注释

请参见

任务

嘿!不应那样做!找出逻辑错误

出错时怎么办:处理错误

了解您的 Bug:三种编程错误

查找错误:Visual Basic 调试介绍

参考

/ 运算符 (Visual Basic)