JavaScript程序设计:基础·PHP·XML
上QQ阅读APP看书,第一时间看更新

3.6.2 错误检查:只是开始

到现在为止,我们在例子中还没有讨论过这样的问题:如果用户没有录入指定的选项之一,那么会发生什么事。我们已经假定用户将会录入正确的选项。当正在学习新的概念和语法时,这样的假定是好的。但是,检查错误(用户的错误和程序运行期间产生的错误)是程序设计过程的一个重要组成部分。在例3.10中,如果用户录入的数字超出1~10的范围,那么会发生什么事呢?或者录入一个字母代替数字?试一试,你将会看到除非录入数字4、5、6、7、8、9或10,输出将总是“You gave the site a rating of D.”。这是因为,如果不满足前3个条件,程序将默认地执行第4种情况。在这种情况下,要修正这个问题,我们可以在语句末尾添加处理在1~10之外的所有情况。检查错误的技术有很多,在继续学习本书的过程中,你将会学习其中一些技术。例3.11展示了一个函数,其添加的代码将在录入有误时显示一条错误信息。

例3.11 为错误使用默认条件

现在,我们就能确定一个无效录入将不能得到结果D等级。在第4章中,我们将使用循环结构修正这个错误。

在继续讨论下一个主题之前,我们将呈现另外一个使用if...else if结构的例子。例3.12展示如何为一个游戏玩家和一个在线对手之间的一场战斗编写结局代码。

例3.12 在一场虚拟战斗中使用if...else if... 对于这个例子,想象你正在为一个在线冒险游戏编写代码。在某个地方,玩家会遇到一个对手,如一个巨人。两人搏斗后获胜者由以下规则决定:若玩家获得的分数超过巨人,则玩家赢;若玩家获得的分数低于巨人,但是玩家已经在游戏中获得一把枪或者一把剑,则玩家也赢;若玩家和巨人的分数相同,则战斗不分胜负。如果玩家不能赢,但有翅膀或者已经获得飞尘而且飞走,则战斗也不分胜负。在所有其他情况中,玩家输。程序已经为巨人赋值50分。为了修饰输出,这个例子也添加了一些东西。

这个程序有几个方面值得一些解释。第11行提示玩家是否有一把枪。顺便一提,使用(y/n)作为回答“yes”或“no”的提示是方便的,可以使用户少一点犯打字错误。

只有当玩家的分数少于巨人时,才执行第9~33行上的if子句。如果玩家的分数大于或等于巨人的分数,就执行第34~47行上的else子句以决定是玩家赢还是不分胜负。

然而,如果玩家不能根据分数赢或者不分胜负,那么第9~33行上的if子句决定结果。当玩家没有枪时,第12行使用一个简单的if子句提示玩家是否有剑。玩家可能有枪也有剑,这种情况在这个游戏中没有特殊的意义。只有当玩家没有枪也没有剑时,第14行才问玩家是否有翅膀。只有当玩家不能凭借武器嬴而且没有翅膀时,才执行起始于第16行的if子句。一旦确定玩家不能赢而且不能靠飞走获得平局,第18~22行就显示输的情况。如果玩家不能凭借分数自动嬴或平局而且还没有输,那么第23~27行确定玩家凭借持有武器而获胜,或者没有武器但凭借持有飞行能力而不分胜负(第28~32行)。

带有图像的文本显示可以使输出非常有趣。如果你要试一试这个例子,那么这些图像包含在Student Data Files中。这个例子的初始显示和3个可能的结果显示在下面。