张小飞的Java之路——第五章
写在前面:
视频是什么东西,有看文档精彩吗?
视频是什么东西,有看文档速度快吗?
视频是什么东西,有看文档效率高吗?
1. 流程控制语句
诸小亮:“接下来,我们就需要学习一下 Java 中的流程控制仪语句了”
张小飞:“什么是流程控制语句?”
“就是用来控制代码执行的,用文字不是很好表达,但是写代码一看,你就明白了”
1. 条件判断语句
诸小亮:“来,我们先看第一种:条件判断语句,在 Java 中使用 if 作为条件判断”
格式:
1. 初体验
“师弟,你先看看这段代码:”

结果:

“原来这就是条件判断啊,很简单啊,如果 a<b = false,就不执行 {} 中的代码了吧”
“是的,不过这只是 if 的最基本用法,我们继续看其他用法”
2. if...else...
诸小亮:“if 可以配合 else 使用,比如:”

结果:

“太简单了,还有其他用法吗?”
“还有最后一种”
3. else if
“可以配合 else if 使用,比如:”

结果:

“有点儿意思,师兄,我总结一下,您看看这样理解对吗?”
使用 if{} else if{} else{},最终肯定只有一对 {} 中的代码能够执行
“确实是这样的,不过需要注意一点:else if 可以在代码中写多个,比如:”

“原来还可以这样,我知道了”
4. 简写方式
诸小亮:“if 还有一种简写方式,来我们也看看吧:”

张小飞:“真的可以吗?我也来试试”
“拜托,把 ‘吗?’换成 ‘!!’,就这么不想相信我?”
“怎么会不相信您呢?只是.....,师兄,不对吧,我这里编译代码时报错了”

“怎么可能,让我看看你的代码”
“跟你的一模一样,您看看”

“。。。,哪里一样了,你在仔细看看:只有在 {} 中的代码只有一句的时候,才能省略大括号”
“噢噢,不好意思,是我看错了”
“另外,虽然可以省略大括号,但是,阿里的编码规范规定,使用 if 必须得有 {}”
“这是为什么呢?”
“应该是为了增强代码的可阅读性吧,你以后写的多了就明白了”
“好的,好的”
2. switch 语句
诸小亮:“来,我们接着看 switch 语句,其实准确来说应该是 swith case 语句”
张小飞:“这又是干什么的?”
“跟 if 类似,但又不一样,是一种选择结构语句”
“。。。,什么叫类似,又不一样”
“我也不知道该怎么描述,还是看代码吧(注意看代码中的注释)”
结果:

“原来是这样,执行到 break 后就跳出 switch 的大括号了”
“是的,其实 switch 并不是很重要,工作中也很少使用”
“那还讲它干嘛?”张小飞问道
“虽然很少用,但还是有人用,别到时后看到了,不明白什么意思就糟了”
“哦,原来是这样”
“师兄,如果把 break 去掉会怎么样呢?就像这样”

“这个,我就建议你自己跑一下,会让你大吃一惊的”
“好,我来试试..........,结果竟然是这个样子”

“为什么会输出 B 呢,是不是我哪里写的错了”
诸小亮:“你没有写错,我给你解释一下吧”
switch 中的值与 case 的值相等时,开始执行 case 后面的代码,执行到 break时,跳出 switch
语法上,break; 并不是必须的,就像你写的那样
输出 B 的原因:第一个 case 匹配上后输出 A,因为没有 break,所以继续往下执行第二个 case 中的代码,直到遇上break,如果所有case都没有break,那么代码执行到switch语句结束
张小飞:“原来如此”
“但是,一般人为规定,每个 case 中都要有 break ”
“如果没有一个 case 可以匹配上呢?”
“那就要加上 default 语句了,比如:”

结果:

,一般人为规定,switch中必须有一个default语句
“好的,我记下了”
“不不不不不不不不不不不不不...”
“哎,这是踩电线上了?”张小飞一边问,一边拉一下诸小亮
“我的意思是,这个东西不用记,只需要看到后能明白什么意思就行”
“好的,好的”
诸小亮:“既然说到了这里,那就再给你说两个规则,这也不用记”
case后面的值不能重复,比如:

上图代码,编译会报错
switch 中的值可以是: byte、short、int、char、Enum、String 等类型
张小飞:“这个 Enum、String 是什么?”
“Enum是枚举,String是字符串,这两个东西我们会在之后的课程中说到”
3. 循环语句
诸小亮:“接着来看:循环语句(非常重要),开发中经常用到”
张小飞:“那,具体什么是循环语句呢?”
诸小亮:“就是可以让代码重复执行的语句”
1. while
诸小亮:“我们先看第一种:while”
语法:
张小飞:“这看着倒是跟 if 很像”
“是的,只不过,while的 { } 中的代码会重复执行”
1. 初体验

“师弟,上图代码的执行过程:”
先判断 num >0 的结果,是否为 true
为 true,则执行 { }中的代码
然后再判断num >0 结果,是否为true。。。。。。,一直这样循环
如果num>0一直为 true ,则 { } 中的代码就一直循环执行,所以 { } 中的代码又称为:循环体
当 num >0 =false时,循环结束
张小飞:“按照您的说法,上图中 while 的代码会一直执行啊,永远停不下来”
诸小亮:“是的,这被称为:死循环,也是禁止出现的”
2. 死循环
诸小亮:“上图代码中 num > 0永远是true,所以循环体会一直运行,这种情况称为:死循环”
在实际开发中,死循环是禁忌,不允许出现
张小飞:“那,怎么才能避免死循环呢?”
“这就需要我们在循环体中修改 num 的值,从而可以让 num>0 为 false,比如:”

结果:

“原来如此,我明白了”
3. 一个小练习
诸小亮:“既然你明白了,就做一个小练习吧,需求:计算1....100的连续自然数之和”
张小飞:“。。。。。。”
“我们先分析一下这个需求,它的计算逻辑应该是这样的:”
先计算1+2=3,得到一个和(假设用 sum 表示这个和)
然后计算 sum+3,得到一个新的和(可以这样写:sum = sum + 3)
然后计算 sum + 4,。。。。。。。
然后计算 sum + 5,。。。。。。。
“我明白了,其实一直都是 sum 加上下一个数,这是在重复运行”张小飞惊喜道
“是的,那么它的代码应该是。。。。”
“我来,我来” 张小飞抢着说
结果:

诸小亮:“没错,不得不说你还是很有天赋的”
“那是”张小飞骄傲的说到
2. do while
张小飞:“这个 do while 也是循环?”
诸小亮:“是的,它跟 while 类似,只是写法上有些不同,比如:”

结果:

“它的执行过程,跟 while 还是有些差别的”
从 do 开始,先执行循环体中的代码
然后判断 n > 0 是否为 true,为 true 就继续执行循环体
当 n >0 =false时,循环结束
“师兄,我知道差别在哪里了,do while中,循环体的代码最少会执行一次,比如:”
结果:

“没错,它跟 while 的区别就是:while 先判断条件,do while 先执行循环体再判断条件”
3. for(重要)
诸小亮:“下面,就介绍最后一个 for 循环了,这是循环语句中最最最最最最最最最最最最最最重要的”
张小飞无奈道:“。。。,师兄,麻烦你正常点儿好不好?”
诸小亮:“这不是为了让你知道 for 的重要性嘛,不识好人心”
“好好好,我错了,您接着说”
1. 初体验
“首先,看一下 for 的语法格式:”
张小飞:“嗯...,额...,完全没有看懂”
“没关系,跑个代码你就明白了,比如:”
结果:

“大致可以看明白,但是详细过程还得请您说一下”张小飞说到
“它的执行过程其实也不难”
1. 首先执行——初始化表达式
一般都是定义一个变量的初始值
注意:在 for 循环中,初始化表达式只执行一次
2. 接着判断循环条件,也就是执行 i<3 这句代码,如果为ture,就执行循环体中的代码
3. 然后执行:操作表达式,紧接着从第 2 步开始重复
4. 当 i < 3 为 false 时,循环结束
“原来是这样的,还挺简单”
“确实不难,不过使用 for 时需要注意一点,看下图:”

结果:

“这是为什么呢”张小飞问道
诸小亮:“这是因为:变量都是有作用域(作用范围)的,for中定义的 i 变量,作用范围仅限于for循环内部”
2. 过 7
诸小亮:“师弟,听说你酒量不错啊”
张小飞:“???师兄,怎么突然说喝酒的事情了,难道你要请我喝酒?”
“屁,想得美,你请我喝酒才是,我是想说,喝酒时你是不是经常玩一个游戏,叫:过 7”
“是啊,但它已经过时了,现在流行‘金陵十三钗’,这个游戏。。。”说起喝酒,张小飞就滔滔不绝起来
“停停停,扯远了,回到代码这里,我是想说根据目前的知识,能否写段代码, 找出1-100 中 7 的倍数?”
“这个...,是用 for 循环吗?”
“没错,就用这个,给你提供个思路:如果数字除以7,余数是0,那么它就是7的倍数”
“好的,我琢磨一下”
3分钟后。
“师兄,我写出来了,你看看”
“嗯嗯,不错不错,早说你有天赋了”诸小亮赞扬道
“过奖,过奖,其实还好啦,也就是比诸葛亮先生多读了本《三国演义》而已!”
“嗯?怎么感觉你在 cue 我,我还比林黛玉多看了本《红楼梦》呢!”诸小亮反驳道
“不敢不敢,不过师兄,你真的看过红楼梦?”
“怎么我看什么书还得跟你说一声?”诸小亮狠狠的瞪了张小飞一眼回答道
“那你知道金陵十二钗正册都有谁?”张小飞问道
“。。。。。。,就你话多”
3. for循环嵌套
张小飞:“这个 循环嵌套 是什么意思?”
诸小亮:“就是说:for 循环中还有 for 循环,也称为:双层 for 循环 或者 多层 for 循环”
“师兄,是这样吗?”
“没错,使用双层 for 循环时,最重要的是:得明白循环体执行了多少次,来看看下面的代码”
结果:

张小飞:“上图中,x 输出了 3 次,y 输出了 12 次,我大概明白什么意思了”
诸小亮:“很好,那我们就继续了”
4. println() 和 print();
诸小亮:“来,我们讲点儿跟 for 无关的东西,System.out.print() ”
张小飞:“这个不就是输出语句吗?”
“你仔细看,咱们之前用的是 println() ,而现在是 print()”
“哦,还真是,这俩有什么区别?”
“很简单:println():打印后换行,print():打印后不换行,给你演示一下就明白了”
结果:

“师弟,这个输出结果能看明白吗?”
“当然可以了,只是不明白为什么突然说起这个东西”
5. 打印 * 号
诸小亮:“因为,接下来我就要让你看个编程题了”
张小飞:“编程题?什么意思?”
“给你一个任务:每一行打印 5 个 * 号,打印 3 行,要用双层 for 循环实现”
“好的,我来试试”张小飞说到
“不,这个我来写,你先看看”

“师弟,从结果中可以看出,一共是 3 行 5 列,对吧”
“嗯,是的,不过您具体是想表达什么意思呢?”
“其实是想让你明白,代码中:外层 for 控制的是行数,内层 for 控制的是每行打印的内容”
“这样啊,我明白了”
6. 练习一下
诸小亮:“既然你明白了,就尝试下吧,写代码打印出下面的图形”


张小飞:“这两图形挺有意思的,我就来试一下”
10分钟后。
“师兄我已经写出来, 你看看,第一个图形的代码:”
“第二个图形的代码”
7. break
诸小亮:“下面讲一下 break 语句 ”
张小飞:“是 switch case 中的 break 吗?不是已经说过了吗?”
“是的 ,不过它也常常用在循环语句中”
break 的使用范围:switch、循环语句(while、do while、for)
作用:跳出 switch 或 循环语句
“师兄,举个例子吧”
“没问题,你看看下面的代码”

“原来是这样用的,我明白了”
“但是,需要注意一种情况:”

结果:

“您是想说,break 语句后面不能在写其他语句,因为无法执行到,是这样吗?”
“聪明,另外,使用多层 for 的时候需要注意:break只能跳出一个循环,比如:”
结果:

“明白,明白”
8. continue
张小飞:“这个 continue 是做什么的?”
诸小亮:“continue 也经常在 循环语句 中用到,作用: 结束本次循环,继续下一次循环”
示例:(注意看代码中的注释)
结果:

“原来是这样”张小飞说到
“好了,我们今天就先到这里吧,剩下的时间,你练习一下?”
“好的,虽然不难,但是东西确实挺多的,我再看看”