![Java王者归来:从入门迈向高手](https://wfqqreader-1252317822.image.myqcloud.com/cover/394/27563394/b_27563394.jpg)
5-1 if语句
依据Java语法规则,可以将if语句分成三种形式,下面将分成三节说明。
5-1-1 基本if语句
这个if语句的基本语法如下。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P70_758661.jpg?sign=1739253913-wRlS1nFRmQSkKNALwbjR2clXve9Hqyzw-0-cf751eb5c99096ab8a4914d179c08f8e)
上述语句含义是如果条件判断是true,则执行程序语句区块,如果条件判断是false,则不执行程序语句区块。下列两图都是上述基本语法的流程图。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P70_758239.jpg?sign=1739253913-OP5MZJRVxyW5Fv8IWajznNR5kKtSHhCM-0-92c2303c3eac9fde2bd77146a31b0c69)
程序实例ch5_1.java:if语句的基本应用,由输入年龄判断输出。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_537649.jpg?sign=1739253913-urgFqxwDVRhXVufHhjdXvbDrhejRLqPm-0-425cf1100c483de2502523a963b3885c)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_537655.jpg?sign=1739253913-3irXLmTViy3JkacDUVUnhnW6KQHSVHef-0-6d7f555aadc0199d8cd1afa49a6ae819)
上述程序如果输入值小于20,将获得第1次执行结果。如果输入数据大于或等于20,程序将不执行任何动作,如第2次的执行结果所示。下图是上述实例的流程图。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_537658.jpg?sign=1739253913-75eUZYcpL8OMhGITjZJHnPHpLPGh7yae-0-7880d8eaf040f41cfe6bcf134b68233e)
在使用if语句过程中,如果程序语句区块只有一条命令,可以省略大括号,将上述语句写成下列格式。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_758664.jpg?sign=1739253913-B3kXxUp8i1yxVtXwqyiNHayYYJuOvVo5-0-770337e14c587d9f223ed67ed7888624)
程序实例ch5_2.java:重新设计ch5_1.java,将语句区块改成只有一条命令,同时省略if语句的大括号。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_758665.jpg?sign=1739253913-DD1f3ZdBhHWOFw8uxKvBeb2XxcPcteuR-0-bbaaeba6fea3edacffa219070f0a1be8)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_537682.jpg?sign=1739253913-PSNYhGT3SHC9KGSdQX90cIYSXAd8HysR-0-0de08d9643c8ebac55eadb5b01654953)
另外,如果程序语句区块只有一条命令,也可以将此条命令放在if语句的右边,此时可以写成下列格式。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P72_758668.jpg?sign=1739253913-fVOmuwJrvX2ClvqRFhKev4tccNgeqMea-0-b5e3d7bc0ad03f3c78bacd224992d28e)
程序实例ch5_3.java:将程序语句移至(条件判断)右边,重新设计ch5_2.java。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P72_538107.jpg?sign=1739253913-9BG7B02mNJpdLDbEOyG25AQO4uDBKfn2-0-f166dafc5005ecdbe19b037ba2aed118)
执行结果
与ch5_2.java相同。
读者应该注意第9行的写法。
程序实例ch5_4.java:程序新手常犯的错误。读者可参考程序第9~11行,由于未加上大括号,所以不论(age < 20)是true或false都会执行第11行。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P72_538115.jpg?sign=1739253913-PkkuvOoTpMMqCi3jhxOeVN0evbCQBXWn-0-d683b8f6dd139fa2e11ca5c7d815c657)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P72_538121.jpg?sign=1739253913-MuNr2x2kf60LjLqNH0lW3a5HJ0KAgeLR-0-f34c2b11a51025f9b8e4006af90b57e8)
5-1-2 if … else语句
程序设计时更常用的功能是条件判断为true时执行某一段程序语句区块,当条件判断为false时执行另一段程序语句区块,此时可以使用if…else语句,它的语法格式如下。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P72_758671.jpg?sign=1739253913-2Y9gBYtDb4gNPsFq88hE2drTkYAGO6C9-0-70234aaf73c5190a6dfc84c21cc8d078)
上述思路是如果条件判断是true,则执行程序语句区块A,如果条件判断是false,则执行程序语句区块B。可以用下列流程图说明这个if…else语句。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538605.jpg?sign=1739253913-BZjl9rVTBAoCI08vDf3xgFHCUTcNhiA7-0-700d5dc15355d30275f48b1fc22c7110)
程序实例ch5_5.py:重新设计ch5_1.py,多了年龄满20岁时的输出。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538608.jpg?sign=1739253913-mfn00yFDv4nbCpFDafKpkYXSLbjF2ZM3-0-958181f4c9efc5711a16fc8b7bbbdfca)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_763242.jpg?sign=1739253913-VvcPmP0X7cOdmpBDdLBuUfsAEFL80GU6-0-cafd033b8d3e8f0177fed1f68fe14097)
上述程序的流程图如下。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538617.jpg?sign=1739253913-ov3rAZ5wBZGD0AyIo711EDV3Ur8FWDHG-0-dbc9c7ed550329128f5872dbf6e6f0ca)
程序实例ch5_6.py:输出绝对值的应用。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538620.jpg?sign=1739253913-HVaVwfkxW5nbzC6eJDSAf8pwKFS8Zk3s-0-1a88114e3e20dc706ae434c90073fd57)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538626.jpg?sign=1739253913-wwxsNS74B916mL39WZUxSq17iACWr8nY-0-81b40927a5478c92fb94c57b0d04fa4d)
程序实例ch5_7.java:世界卫生组织定义45~59岁的人是中年人,请输入年龄,程序将判断你是否是中年人。这个程序的重点是程序第9行条件判断除了有比较运算符外,还有逻辑运算符&&。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_539029.jpg?sign=1739253913-8ahHVLoIUgW4ebdT8AKLv1sCtS7CfaGY-0-1fa59c3edf493b5a6f5b267434586723)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_539035.jpg?sign=1739253913-qRaBeXsMsquZCgwpkYxKj3m19nOYRRMT-0-089c7d874939dd68e6732c9c7da038b9)
5-1-3 再看三元运算符
在if…else语句中,经常可以看到下列语句。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_758679.jpg?sign=1739253913-y2qb6AI5TwANV5aKyvp6LWEvry8G6ZtL-0-be9299541079357b77cedb32d70bfd56)
其实上述语句是求较大值的运算,上述语句会比较a是否大于b,如果是,则令c等于a,否则令c等于b。在4-1-7节介绍了三元运算符,在4-5-5节讲解了此三元运算符的实例。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_758681.jpg?sign=1739253913-IvYPvWP0LNvTeXAAgbSk6MMZpH8gwYMM-0-4f9f221b1050845c4dd9657e7e4dd693)
它的执行情形是:如果e1为true,则执行e2,否则执行e3。如果想求两数的较大值,若使用这个三元运算符,则其写法如下。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_758683.jpg?sign=1739253913-fdbxe68vkmsbxspEKs6dMIyZ9ACTlmjU-0-c2c26bd79f942d3c9763eeb7f47b01b3)
上述语句不论是使用三元运算符或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可以用这个语句,很容易就可以完成这个工作。这个语句的基本语法格式如下。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_758685.jpg?sign=1739253913-0cdaK1F2IFeOpLR0SatklUt1ZP0wIgUk-0-7ce16e4f14d2e911b8a7ae36aba48dc1)
如果条件判断一是true则执行程序语句区块一,然后离开条件判断。否则检查条件判断二,如果是true,则执行程序语句区块二,然后离开条件判断。如果条件判断是false,则持续进行检查,上述else if的条件判断可以不断扩充,如果所有条件判断是false,则执行程序语句区块n。下列流程图是假设只有两个条件判断说明这个if…else if…else语句。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P75_539543.jpg?sign=1739253913-FM2yzs8RKHCxAJY1WiuMFVs04zLyqeJl-0-1d74c02bfafc9b3d2a22a6296f2b4644)
程序实例ch5_8.py:请输入数字分数,系统将响应A、B、C、D或F等级。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P75_539546.jpg?sign=1739253913-POPvpiC8HoUfNOpqm0Yk6HMeKs6J0DEq-0-2d91b27ad3056150736596f6fbde1c8e)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P75_539552.jpg?sign=1739253913-CzVScC9E4OEkyJ0SHXCuUODYYelCVSK1-0-c55d6cafbd716093652982259b0801e4)
程序实例ch5_9.py:有一风景区的票价收费标准是100元。
- 如果小于等于6岁或大于等于80岁,收费是打2折。
- 如果是7~12岁或60~79岁,收费是打5折。
请输入岁数,程序会计算票价。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P76_758691.jpg?sign=1739253913-FDFgj7ZrLKbl429CiiQP2WLU5bnFxMwJ-0-1f01e8acd5b06130f74be5a1de6d451c)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P76_539963.jpg?sign=1739253913-cr5SPIEvOGNfIlZ805zgDXO25qZ76FxI-0-a0216d43f06ba55a2a6a2dbcea62b891)
在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)。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P76_758692.jpg?sign=1739253913-lK8cuEECGQrHj8ur4qnJLy0DycH42lxR-0-1d9a42736f244789547d5b4dfdedc77b)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P76_539972.jpg?sign=1739253913-jIfA1Hg2nKFoNnw4DsV6bGQFEdLdlcf4-0-2d2e07c4d8afed5d5ebff9c9791815b6)
下列两张表格取材自www.LookupTable.com,第一张表是ASCII码值的内容。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P77_540376.jpg?sign=1739253913-0utOfjhAZz2l6MpDZjdOn0CAQy6otrK2-0-90e38c0d35d73d4ca6cfb6ddfa309f7e)
第二张表是扩充的ASCII码。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P77_540379.jpg?sign=1739253913-Q7OFxGdPdDshqnRn0gHKs2zjB1eWPyHm-0-f2801745e753380ff8e28a7378cc5d35)
5-1-5 嵌套if语句
嵌套的if语句是指在if语句内还有其他的if语句,下列是其中一种情况的实例。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P77_540383.jpg?sign=1739253913-x5qHGt2gJ3I76cuMBcGIHGkYeseOWPR0-0-655999a5f211582af365b15f9137e7ab)
其实Java允许加上嵌套多层,不过层次一多时,程序维护会变得比较困难。
程序实例ch5_11.py:测试某一年是否为闰年,闰年的条件是首先可以被4整除(相当于没有余数),这个条件成立时,还必须符合:除以100时余数不为0或是除以400时余数为0,当两个条件都符合时才算闰年。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P78_758695.jpg?sign=1739253913-q5cB8YNDYoHqdCy479m62KAzkiFl7TmV-0-76ab0c4f36bbcb27e03ae91806ad158d)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P78_540797.jpg?sign=1739253913-JzNQL69ZjEDkQ5hPfyvCaNKdyRCDTlBb-0-bb5843146c520699e5e7125d035e0e5b)