![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=1739531875-GKdN9QqSWGF8zSPsit9gBJA4wiMj1Slw-0-63c3eb1fb962c5cc24ae14f10f468b60)
上述语句含义是如果条件判断是true,则执行程序语句区块,如果条件判断是false,则不执行程序语句区块。下列两图都是上述基本语法的流程图。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P70_758239.jpg?sign=1739531875-yt7Gj1oMZ099XQaxN1RFxNCyNHgD7r3b-0-7b7d274903d096da1366089f3706c8da)
程序实例ch5_1.java:if语句的基本应用,由输入年龄判断输出。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_537649.jpg?sign=1739531875-tfrA7hYGwfMgzd8NfEJNJCPvSz9ddKMk-0-116e539a5e096bf48667eb3c109a0340)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_537655.jpg?sign=1739531875-oHhOYfSbD1Pz8ySUQH7cSyskCOHOVcHA-0-c75f25568a24ca182df9ad83b52da612)
上述程序如果输入值小于20,将获得第1次执行结果。如果输入数据大于或等于20,程序将不执行任何动作,如第2次的执行结果所示。下图是上述实例的流程图。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_537658.jpg?sign=1739531875-4hA85fjgSpDdxi7Ff8djnngoh6mRFfSX-0-a28f2f10af0864d095d460f632d0ee25)
在使用if语句过程中,如果程序语句区块只有一条命令,可以省略大括号,将上述语句写成下列格式。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_758664.jpg?sign=1739531875-LAHm3k4ITSTtRT7DjeGI9NkiD3Rm7W0q-0-10fb3224a7b4ff59e107158bda449dfb)
程序实例ch5_2.java:重新设计ch5_1.java,将语句区块改成只有一条命令,同时省略if语句的大括号。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_758665.jpg?sign=1739531875-UVEgvQTjyQBByboYdZKgB9OQ537RQ8gu-0-605781dc02c4e07590b420997b2fe781)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P71_537682.jpg?sign=1739531875-LTIMVK0FeKJm3FQ27WcvBmCkS2MjxhVu-0-8fa87cfbddf40aea852f9f2416305d65)
另外,如果程序语句区块只有一条命令,也可以将此条命令放在if语句的右边,此时可以写成下列格式。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P72_758668.jpg?sign=1739531875-S1jF17NPFezUnIgboOb6vjNF5WnTKk35-0-04b560835ad4d9597f224d9d27c50988)
程序实例ch5_3.java:将程序语句移至(条件判断)右边,重新设计ch5_2.java。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P72_538107.jpg?sign=1739531875-6jNUh1mFiWXsLmsKsV9rB4dlrEwALaug-0-08c0b58312e3dda84f5fe355562e18ff)
执行结果
与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=1739531875-ZmVxoBCS42ea2gBS40exSG1bmTSUiR2v-0-9a0985b18a8f7b0c3a7f6352ce0d5b2b)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P72_538121.jpg?sign=1739531875-WgmEDieRaAc7EVJeiTr3MRWcVebTvprF-0-9503fb11b19f5d3717d5b4709d344dcc)
5-1-2 if … else语句
程序设计时更常用的功能是条件判断为true时执行某一段程序语句区块,当条件判断为false时执行另一段程序语句区块,此时可以使用if…else语句,它的语法格式如下。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P72_758671.jpg?sign=1739531875-NMwPsyBqvVvxn5xwdfV4pOOU3vnONkAE-0-b1203d8c56bd47d1244566ccb108e809)
上述思路是如果条件判断是true,则执行程序语句区块A,如果条件判断是false,则执行程序语句区块B。可以用下列流程图说明这个if…else语句。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538605.jpg?sign=1739531875-ZIwgVbBgkNN1IC4ovjmIORdb4D51tSVz-0-171a5604f2e68864cd96ee87eabafbe9)
程序实例ch5_5.py:重新设计ch5_1.py,多了年龄满20岁时的输出。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538608.jpg?sign=1739531875-RZeRzWmQ6FCd58irhy1rJDLXP8lWJIgR-0-ff7fd0fcb7cb9c53cad208b9aa4b0741)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_763242.jpg?sign=1739531875-0GRfJdPfYqbQIsJotzKZKRkfcPqrydP3-0-563f2fd867f64956cf04ed083f5258e8)
上述程序的流程图如下。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538617.jpg?sign=1739531875-zfijL9YV7Q8bVnnDU0z6wtMDbpgsmqWk-0-d4166a8220a9191e3053478b7e1a5315)
程序实例ch5_6.py:输出绝对值的应用。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538620.jpg?sign=1739531875-ZONKmdFzJ7hjIy5zYiOXaP2BvzBRg7BJ-0-2fa1130d73864bc1baaa5a88f1d0ca1a)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P73_538626.jpg?sign=1739531875-zW5psK3hcqR1dxa5JVKGFMLrtNSAkiJl-0-0b6c77bee32427b4b108c4bdb1bf84dd)
程序实例ch5_7.java:世界卫生组织定义45~59岁的人是中年人,请输入年龄,程序将判断你是否是中年人。这个程序的重点是程序第9行条件判断除了有比较运算符外,还有逻辑运算符&&。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_539029.jpg?sign=1739531875-MvFqXGJXPUIKLIDGwhrH2jlFJk0plZmn-0-0fa8acce869dc8199e1c918d01f3a1e6)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_539035.jpg?sign=1739531875-znzuVasBUEMkQXIyqe9Puc0zVvs44NWC-0-5e9c2479f6ca416cf319841e0d28a2c9)
5-1-3 再看三元运算符
在if…else语句中,经常可以看到下列语句。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_758679.jpg?sign=1739531875-uza1RjmlgpvIFQH9ZeE5IplXgvGJGanT-0-3f105131fe587c47634295725f8068e3)
其实上述语句是求较大值的运算,上述语句会比较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=1739531875-f5h2xyFYOG7OXnGOGRTOb545JaEPyREz-0-8c3d36b8a2dd09c0ced01427e783f92a)
它的执行情形是:如果e1为true,则执行e2,否则执行e3。如果想求两数的较大值,若使用这个三元运算符,则其写法如下。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P74_758683.jpg?sign=1739531875-uxWPInOL0rYtdO0ZjyE7MZZKJfnJxguv-0-b820e19f7d31da94d27fc83891c169e6)
上述语句不论是使用三元运算符或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=1739531875-qoKQ8OTI4kilKVzHl9n3mFuEtg2HbWBh-0-a46a179c0ae09336fe3410592a0cd94e)
如果条件判断一是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=1739531875-afLtl5MTG9Cc4Gpae7NKGzIE5FcRMHha-0-c76cfd4b1c9f07492273ace4392302ef)
程序实例ch5_8.py:请输入数字分数,系统将响应A、B、C、D或F等级。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P75_539546.jpg?sign=1739531875-bsv5rIDX2fu0KpNt2rMkxzCg2J6RNbbP-0-c801bd0ffe9dab29394bbb3f5e443c5c)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P75_539552.jpg?sign=1739531875-pG5UZH0GYVxGR4bzV8ExAS16LuBkiXnA-0-e581294441755f99a976142f50a31746)
程序实例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=1739531875-i0b8uD7Xy83qwlQJvdkDCqYWZ5cDiOrm-0-91f8a0d8c135f13bf09dd22a3d1d7d77)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P76_539963.jpg?sign=1739531875-XnWPyD2I5JNGlp4hDwmASjzpten3IwjW-0-6c02a7398b4262a22f21da504b0923d9)
在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=1739531875-tQTCQlOGs5VZpXT4zRrQQWLANp3brP3d-0-5fe8516360e114aa6ffcc20a78bf3843)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P76_539972.jpg?sign=1739531875-BwpD8nuhpt1erBfMBCexSoptIOwDTK0h-0-eb373244cac31459d7bd1796eef3ad12)
下列两张表格取材自www.LookupTable.com,第一张表是ASCII码值的内容。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P77_540376.jpg?sign=1739531875-ptrrgOPrNbsWAy9B5c2VIIM84BNU6733-0-a5d0fbc30a02777468e03d79b930c937)
第二张表是扩充的ASCII码。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P77_540379.jpg?sign=1739531875-XjmPi3x2bzyvej4YTWbNPQbD96BDuqES-0-ceb0d99791ce7588e4b279d21dd2e68a)
5-1-5 嵌套if语句
嵌套的if语句是指在if语句内还有其他的if语句,下列是其中一种情况的实例。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P77_540383.jpg?sign=1739531875-UPzJL4uQDMASwCr1i1PqfuShMtQZefVq-0-7302c2b78445cfb2d52fba69ed9fd0a7)
其实Java允许加上嵌套多层,不过层次一多时,程序维护会变得比较困难。
程序实例ch5_11.py:测试某一年是否为闰年,闰年的条件是首先可以被4整除(相当于没有余数),这个条件成立时,还必须符合:除以100时余数不为0或是除以400时余数为0,当两个条件都符合时才算闰年。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P78_758695.jpg?sign=1739531875-OIpfUfr11laEioDd5iF8GTmaQdm07h1b-0-9bdd787173d0015331006edcc08f9f70)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P78_540797.jpg?sign=1739531875-wUdwASrLqTs7c4UZr9xIsuA2qf4YyaRE-0-35a75a59cf0e85fd1af432613db364ae)