另一个 Bug:仍然有错误
更新:2007 年 11 月
在本课中,您将学习如何查找仅在特定情况下出现的逻辑错误。
在上一课 嘿!不应那样做!找出逻辑错误 中,您学习了如何查找并修复逻辑错误。在该课的示例代码中,仍隐藏着一个严重的 Bug。由于该 Bug 仅在特定的情况下出现,因此找到它比较困难。
测试程序
作为一个程序员,当您开始测试您的程序以检查它是否按照您所希望的方式运行时,您处于不利的位置。这是因为,您知道程序会如何运行,所以不太可能犯错误,而正是那些错误有可能暴露出逻辑错误。而用户对您的程序不熟悉,所以他们可能并且会做出让您意想不到的事情。
例如,在一个程序中,通过用英里数除以旅行所用的小时数来计算每小时的英里数。如果用户在小时数或英里数中输入零会出现什么情况呢?让我们试试看。
试一试!
测试程序
打开在上一课 嘿!不应那样做!找出逻辑错误 中创建的 LogicErrors 项目。
说明: 如果您没有完成或保存前面的项目,您需要返回并完成它,然后才能继续。
按 F5 运行程序。在第一个文本框中输入 0(表示分钟数),在第二个文本框中输入 5(表示英里数),然后单击“Button1”。
出现一个消息框,其中显示消息“平均速度无限”。
将项目保持为打开状态——在下一个过程中,您将学习如何查找逻辑错误。
5 除以 0 = 无限?
在上一步骤中,“无限”可能并不是您想得到的,但在数学上这是正确的——5 可以无限次地被 0 除。但是,这个结果不是您希望用户从程序中看到的。您能想到一个方法防止此类事件发生吗?
您可能会想到添加一个错误处理程序,这一过程您在 出错时怎么办:处理错误 课中已经学习过。然而,在本例中这一方法不会奏效——因为结果“无限”并不是一个错误;而只不过不是您想要的结果而已。
因为显示速度为零可能没什么用处,所以解决这个问题的一种方法是测试出零值,然后警告用户必须输入一个更大的数字。在这一点上,您可能还需要防止用户输入负数,因为负数也会产生错误的结果。
在下一步骤中,您将修改 Button1_Click 事件处理程序中的代码,使得仅当值大于零时才调用 GetMPH 函数。
试一试!
修正 bug
在“代码编辑器”中,按如下所示更改 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
按 F5 再次运行程序。在第一个文本框中输入 0,在第二个文本框中输入 5。然后单击“Button1”。
您将看到消息框指示您输入一个大于 0 的数字。请试着使用其他的数字组合来测试您的程序,直到您对 bug 修复的结果满意为止。
后续步骤
在本课中,您学习了如何查找并修复一个导致意外行为的逻辑错误。在下一课中,您将学习如何在代码中使用注释。
下一课:在程序中进行注释:使用注释