java零基础入门-核心语法篇(六) 流程控制
顺序结构
顺序结构就是从上到下,从左到有。如果不按照这个顺序来,就会发生错误,我们来看看
我们使用变量的顺序,一般是首先声明变量,再去使用变量,而如果你改变这个顺序的话,先使用,再声明,使用的时候就会报错。有些同学会问,为什么他不去楼下看看有没有,万一楼下有呢?没办法,他的智商暂时达不到。这样我们可以看到,在任何一个代码块里面,程序的执行都是从上到下。如果一个类里面有很多方法,方法的调用顺序就不一定了,这个后面再说。
这里我们看到了一个problems的窗口,这个窗口可以告诉我们详细的报错位置和报错信息,我们要学会使用这个工具帮助我们排除错误。如果你的界面里面没有,那么请这样打开它。
所有你想要的窗口,我们都可以通过这种方式来打开,提高我们的编码效率。
分支结构
来来来 ,说重点了,敲黑板~~~!!!
你以后工作有50%的概率甚至更高在写这个,if else 流程控制语句,当然有很多方法是可以替代这个重复工作的,比如用一点点设计模式啊,但是,我劝你3年内还是老老实实用这个吧。
首先,我们看看流程控制怎么用
我们看到,如果modify是true的话,会打印 “我死给你看”,而modify是false的话,会执行“还能做朋友”,所以不修改需求,还能做朋友是正确的。这里要注意 if 后面的括号里,一定要是 boolean 类型的结果。上期讲的运算符里面有说过,比较运算和逻辑运算结果都是boolean,所以这个括号里要放比较运算和逻辑运算,当然直接放boolean类型变量也是可以的。
这个if else 其实有3种用法,我上面写的 if else 是最常用的,还有两种我们看看
只有一个 if ,需要对特殊情况进行处理的时候,用的比较多。比如一段代码是选择你喜欢什么狗,但是有调皮的人说我喜欢猫,这里加个if语句,如果喜欢猫请出门右转,喜欢狗的继续执行下面的代码。
......
if(喜欢猫){
出门右转不送
}
请选择你喜欢的狗
if(...){
}else if(...){
} else {
}
......
if else 结构 , 一般用于非此即彼的逻辑判断,比如,要么不改需求,要么改需求,没有第三种情况了。这种结构使用if else。
一个if ,多个 else if ,一个else ,常用于对程序逻辑进行分别处理。比如一个宠物医院,来了狗看病怎么处理,来了猫怎么处理,现在人养的宠物越来越多了,什么猴啊,飞鼠啊,猪啊,这些来了怎么处理
if (狗){
}else if( 猫 ){
}else if(猪){
}
这里有个问题,首先是最后那个else其实是可以省略的,但是通常不建议这样做,因为,你会发现,你的程序会突然好像运行了,但是又像没运行,因为结果不在你设置的任何一个范围内,就不会有输出结果。所以加上else,可以保证你没有考虑到的情况得到输出。
再一个很重要的问题就是一定要留意多个语句一定要覆盖全集,并且最好不要有交集。啥意思?一脸懵比?上图
首先看覆盖全集,显然这几个条件没有覆盖全集,如果小于或者等于15岁,就会不报错,不输出,找不到问题。然后就是交集的问题,为什么45岁还是小鲜肉?因为分支语句也是按照从上到下的顺序来判断的,如果写在前面的条件满足了,是不会再往下匹配的,而是直接结束这个分支语句,就是说他先判断了 45 > 15,这个结果是成立的,然后就直接输出了 “小鲜肉”,然后就结束了,不会往下去判断 45 > 15了。而这个错误也是经常会犯的逻辑错误,我们的分支结构不能有交集,比如我这里 45 即大于15 又大于40,满足两个条件,他就不会去我真实想要他去的地方。
来看这个,覆盖了全集,没有交集,这样才会得到正确的答案。
还有一种要避免的情况,就是过多的层次分支嵌套,这样不仅难以组织逻辑,给阅读代码也带来很大的麻烦。要知道,你写的代码不一定只有你一个人看,可能会有同事啊,或者后来的同事啊会看你的代码,修改业务,所以代码一定要具有可读性。千万别写那种就你一个人认识的代码,也不要写逻辑过于混乱的代码,那样会有人边看代码边说 @#$!S@#%^B& 的。
再来说另外一种分支结构 switch
说实话,这个结构用的比较少,因为,写起来比较繁琐,而且功能可以被if else 完全取代,所以我们了解一下即可。
switch后面的条件,是一个变量(petHospital),该变量的类型可以是 int,char,String (字符串类型,马上会说这个)。然后就讲完啦。。。
循环结构
这是一个考验智商的结构,本人刚开始接触这个结构的时候也是被绕的昏头转向,特别是嵌套循环,所以刚开始理解这个有困难很正常,千万不要自暴自弃。这个结构非常有用,用的好,我们可以使用一些算法让我们的代码运行的更加有效率,用的不好,电脑死机,服务器宕机都有可能,所以这个是重点中的重点,请好好理解,多加练习。
循环结构有以下几种
for 循环 :使用频率非常高,必须深刻理解,for循环是使用下标来标记元素的
foreach 循环:使用频率也很高,在某些场景下,和for循环可以相互替代,foreach不使用下标标记元素
while 循环:使用频率中等,一般用于处理流数据,在某些场景也可以被for循环替代
do while循环:很少使用,在某些特定场景会使用,知道即可,使用时查阅
本章篇幅有限,我们先把其他几种循环讲了,下一篇单独介绍for循环,因为它实在太重要了
while循环:我们来一个从0打印输出到100的例子
循环结构需要初始化条件,就是你得告诉电脑,你要从哪开始。int intTest = 0; 就是初始化条件,从0开始。
while后面有个循环条件,里面是个boolean值,跟 if 后面那个一样,必须是布尔类型,它来决定是否继续下一次循环。
我这里直接在打印的地方写了迭代语句,迭代语句的作用就是改变初始化条件,让它用新的值进行下一次循环。
好吧,我知道,这个动态过程用语言来描述是苍白无力的,那我们动起来吧。
WTF?我打印个100怎么执行了102次?
这里有个重要的概念,一定要养成习惯,就是在任何编程语言里面,数数都是从0开始,比如我们的下标,但是我们计算次数什么的会从1开始数,这样就会造成误解,从0打印到100,一共101次打印(从1数到100是100次,从0开始是101次),到102次时,循环条件返回false,停止循环。第102次是因为在判断条件的时候,就终止了,其实并不算执行完成。这样懂了吧。
这里很重要的是迭代语句,有了他,我们才能循环下去,有人说了,自增++写在后面是这样,那写在前面会是什么样。
其实很简单,他就是在打印之前就已经自增了,所以是从1开始打印的。看最后一次,我们先输出了intTest他是100的,然后打印++intTest是101,说明在打印之前已经完成了自增。这里还顺便复习了下上面的分支语句,我循环次数很多,但是我只想看最后一次的具体变化,我可以设定一个条件,比如intTest是100的时候,我再看发生了什么,而不是每条都看,那样会影响之前的结果,看起来不方便。
do while循环:
其实如果理解了 while 循环,再看do-while,感觉是差不多的,值得注意的是while会先判断条件再执行代码,条件不过关不执行,而do-while会先执行再判断,即使不满足条件也非要执行一次。
好好理解while循环,特别是循环过程,每个变量,每个判断都是怎么变化的,不然下次讲for循环,就是这样...