嵌套的if语句
当if表达式为true时,被执行的语句可以还是一条if语句,它也可以作为else子句的一条语句。这就使你可以表达一种错综复杂的逻辑关系,比如"如 果我的银行有足够的余额,如果我带着支票本,就买一辆汽车,要不然如果我可以从银行获得贷款,也会买一辆汽车。"一个嵌套在另一条if语句中的if语句又 可以包含一个嵌套的if语句。可以像此下去多层嵌套,只要你清楚自己在做什么或对繁琐、混乱情有独钟。
我们可以对前面例子中的if语句进行修改来说明嵌套的if语句, 这里如果假设number的值小于50,则显示一条有偶数值的信息。 因为有else子句,所以必须用一个大括号将嵌套的if语句括起来。大括号中内嵌I}语句意味着,若该语句拥有else子句,必将出现在包含嵌套if语句的大括号中。如果没有大括号,程序也可以被编译并运行,但逻辑结构却会发生变化。让我们看看是怎么回事。
在嵌套多层if语句后,会产生一个问题,即一个特定的else子句属于哪一个if语句。如果将上面代码中的大括号去掉,我们可以得到 这种书写形式与前面的逻辑结构有着本质的区别。这里的else子句属于被嵌套在内的用来测试number值小于50的if语句,所以,第二个 prirttln()调用仅在偶数值大于或等于50时才被执行。很显然,与我们所需要的结果有差别,因此本例中的输出结果是错误的,但是它能够说明将 else连接到if的规则,即: else子句永远属于前面的距离它最近的、属同一程序块的、没有匹配else子句的if语句。 你一定要认真仔细,以确保在嵌套if语句时的缩进格式正确。依照标识的缩进格式理解逻辑结构,很容易让你采纳,但它有可能是完全错误的。 让我们在另一个程序中试试if-else的应用,试试看--一种笨拙的译码方式 按如下所示,建立LetterCheck类并编写main()方法的代码:
public class LetterCheck 如何工作 这个程序用来识别存储在 变量symbol中的值是大写字母、小写字母还是其他字符。它首先产生一个在0到127之间的随机字符,这个字符与基本的7位ASCII字符集 (ISO646)中的字符对应。你可以在附录D中查阅ASCII字符集编码。ASCII字符的编码与Unicvde字符集中对应字符的编码相同。在这个字 符集中,字母'A'到'Z'用65到90这组相邻的ASCII编码来表示。小写字母用另一组从97到122·的相邻ASCII编码来表示。所以,你只需将 字符编码加上32就可以将任何大写字母转换为小写字母。 该If语句确实有一些复杂,所以让我们来看看下述逻辑图。 这张图一共有4条if语句。第一条if语句测试symbol是否大于等于'A'.如果成立,它可能是一个大写字母、小写字母或其他可能的编码,反之,它肯定不是一个字母。所以,if语句的else子句(直到程序结尾)对这种结果产生一个相应的信息。 |