
5-1 if语句
依据Java语法规则,可以将if语句分成三种形式,下面将分成三节说明。
5-1-1 基本if语句
这个if语句的基本语法如下。

上述语句含义是如果条件判断是true,则执行程序语句区块,如果条件判断是false,则不执行程序语句区块。下列两图都是上述基本语法的流程图。

程序实例ch5_1.java:if语句的基本应用,由输入年龄判断输出。

执行结果

上述程序如果输入值小于20,将获得第1次执行结果。如果输入数据大于或等于20,程序将不执行任何动作,如第2次的执行结果所示。下图是上述实例的流程图。

在使用if语句过程中,如果程序语句区块只有一条命令,可以省略大括号,将上述语句写成下列格式。

程序实例ch5_2.java:重新设计ch5_1.java,将语句区块改成只有一条命令,同时省略if语句的大括号。

执行结果

另外,如果程序语句区块只有一条命令,也可以将此条命令放在if语句的右边,此时可以写成下列格式。

程序实例ch5_3.java:将程序语句移至(条件判断)右边,重新设计ch5_2.java。

执行结果
与ch5_2.java相同。
读者应该注意第9行的写法。
程序实例ch5_4.java:程序新手常犯的错误。读者可参考程序第9~11行,由于未加上大括号,所以不论(age < 20)是true或false都会执行第11行。

执行结果

5-1-2 if … else语句
程序设计时更常用的功能是条件判断为true时执行某一段程序语句区块,当条件判断为false时执行另一段程序语句区块,此时可以使用if…else语句,它的语法格式如下。

上述思路是如果条件判断是true,则执行程序语句区块A,如果条件判断是false,则执行程序语句区块B。可以用下列流程图说明这个if…else语句。

程序实例ch5_5.py:重新设计ch5_1.py,多了年龄满20岁时的输出。

执行结果

上述程序的流程图如下。

程序实例ch5_6.py:输出绝对值的应用。

执行结果

程序实例ch5_7.java:世界卫生组织定义45~59岁的人是中年人,请输入年龄,程序将判断你是否是中年人。这个程序的重点是程序第9行条件判断除了有比较运算符外,还有逻辑运算符&&。

执行结果

5-1-3 再看三元运算符
在if…else语句中,经常可以看到下列语句。

其实上述语句是求较大值的运算,上述语句会比较a是否大于b,如果是,则令c等于a,否则令c等于b。在4-1-7节介绍了三元运算符,在4-5-5节讲解了此三元运算符的实例。

它的执行情形是:如果e1为true,则执行e2,否则执行e3。如果想求两数的较大值,若使用这个三元运算符,则其写法如下。

上述语句不论是使用三元运算符或if…else语句,最后所获得的结果是一样的,其实三元运算符就是由这个if…else语句演变来的。
5-1-4 if … else if …else语句
这是一个多重判断,程序设计时需要多个条件做比较时就比较有用。例如,在美国成绩计分是采取A、B、C、D、F等,通常90~100分是A,80~89分是B,70~79分是C,60~69分是D,低于60分是F。若是使用Java可以用这个语句,很容易就可以完成这个工作。这个语句的基本语法格式如下。

如果条件判断一是true则执行程序语句区块一,然后离开条件判断。否则检查条件判断二,如果是true,则执行程序语句区块二,然后离开条件判断。如果条件判断是false,则持续进行检查,上述else if的条件判断可以不断扩充,如果所有条件判断是false,则执行程序语句区块n。下列流程图是假设只有两个条件判断说明这个if…else if…else语句。

程序实例ch5_8.py:请输入数字分数,系统将响应A、B、C、D或F等级。

执行结果

程序实例ch5_9.py:有一风景区的票价收费标准是100元。
- 如果小于等于6岁或大于等于80岁,收费是打2折。
- 如果是7~12岁或60~79岁,收费是打5折。
请输入岁数,程序会计算票价。

执行结果

在4-9-2节说明了屏幕读取数据,结果发现唯独缺读取字符,要读取字符需要使用读取字符串函数scanner.next(),然后再调用String.charAt(0)方法读取字符,可参考ch5_10.java的第8行。
程序实例ch5_10.py:这个程序会要求输入字符,然后会告知所输入的字符是大写字母、小写字母、阿拉伯数字或特殊字符。这个程序主要是用字符码值的比较,了解输入字符是否属于特定字符。大写字母的码值为65(A)~90(Z),小写字母的码值为97(a)~122(z),阿拉伯数字的码值为48(0)~57(9)。

执行结果

下列两张表格取材自www.LookupTable.com,第一张表是ASCII码值的内容。

第二张表是扩充的ASCII码。

5-1-5 嵌套if语句
嵌套的if语句是指在if语句内还有其他的if语句,下列是其中一种情况的实例。

其实Java允许加上嵌套多层,不过层次一多时,程序维护会变得比较困难。
程序实例ch5_11.py:测试某一年是否为闰年,闰年的条件是首先可以被4整除(相当于没有余数),这个条件成立时,还必须符合:除以100时余数不为0或是除以400时余数为0,当两个条件都符合时才算闰年。

执行结果
