00:01
本小节呢,我们来学习一下if if else和Switch啊,他们三个呢是。一个判断结构,它们的主要作用呢,就是在啊不同的场景下要做不同的处理的时候啊,啊我们来用这个判断结构,比如说啊,今天是星期天,那我就在家里睡觉,如果今天是星期一的话,那我就在公司里面工作,啊就大概是这样的一个处理。好,我们来看一下左边这张图啊,当我们进入到这个判断结构里面之后呢,它会有一个条件的概念,这个条件呢,它是一个布尔类型。当这个条件满足的时候,这个布尔类型的值呢,就是处,然后会进到这个。处理逻辑里面。就是这个条件代码如果不满足的话呢,那它就不会进入到这个里面,然后直接继续往下走,一直走到呢,程序结束啊大概是这样好,然后呢,我再呃举个例子讲一遍这个这个图条件,如果今天是星期天,然后星期天的条件被满足,条件代码是什么呢?在家里睡觉。
01:25
就是这样,如果今天不是星期天,那我就进入到其他的代码逻辑里面啊,那我可能就是在工作了啊,大概就是这样的一个情况,然后它也称为这个控制流语句,就是if if else和Switch呢,它也称为控制流语句,控制什么流呢?控制代码的执行流啊。好,我们来看一下代码怎么去敲,我们先来看一下if的语法,If呢,它是非常简单的这个单词了,If翻译成中文呢,就是如果,如果这个后面呢,跟的就是这个,呃,圆括号,原括号里面呢,它需要放的就是一个布尔类型。
02:12
然后当这个布尔类型啊,它只有两个值嘛,一个是这个true和false这两个。当为触的时候呢,它就会进到后面这个花括号里面的这个代码块里面,而这个呃,圆括号里面呢,只要是能产生布尔结果的这个表达式也好,具体的值也好,只要能产生布尔的这个结果,都可以往这个这个里面去放好,然后我来给大家演示一下这个东西是怎么用。好衣服啊,如果这个花括号里面的内容呢,一一等于二,那么我就输出这样一句话,大家好,然后大家可以看到这句话明显的它的透明度变得非常透明了啊,为什么?因为一永远不可能等于二啊,大概是这样。
03:22
然后二等于二呢,他也马上变回来了,因为二是绝对有可能是吧,等于二的。好。因为二和二之间进行这样的一个比对的之后呢,它是可以产生一个不尔值的,就是二等于二的时候呢,它的结果是处对吧,大概会是这样这么去理解啊,这个呢,就是一个表达式了,还有一种情况呢,可以这么去写。是吧,一百一百除以除以二。
04:06
然后等于二。如果100除以二等于二的话,那我也可以进来,然后聪明的这个visual修student呢,他就帮你算出来了是吧,你100除以除以二呢,是永远也不可能等于二的,他也不会执行这个大加号啊不行,我们F运行一下。啊。其实它的这个颜色的透明度的一些变化呢,也是提醒你了啊,它它的一些代码是有没有可能会被执行的是吧,再跑一遍是吧,他不会执行这个好当我们100除以二等于50的时候再看。啊大家好,被执行了在这里,好,那那么这个它可以放一个具体的值,这是这是放一个表达式是吧。
05:11
然后具体值,具体值表达式是这个样子,具体值呢,就是布尔类型的了,好这个时候呢,啊,我们声明声明一个I啊,也不不能叫叫意意思OK吧。然后这个时候t rue啊,给它设置成这个处的值,然后这个时候呢,我们直接放一个布尔类型的值进去是吧,数的值呢,它刚好就直接是一个布尔类型了,然后它可以直接放到这个衣服的里面,然后我们再运行起来跑一下。啊,大家好,它是可以进入进来的,当我们把它改成fo的时候,你看大家好,就没有出来,所以这个代码呢,就没有被执行。
06:07
好,有的小伙伴可能就会问了啊,那我不写这个,我不我不给他复制呢。我既不给是吧,不给不给处也不给boss,这个时候操作系统会怎么样去处理它呢?是吧?一些比较抖机灵的小伙伴就会就会这样去想,我什么也不给他会不会有个中间值啊,既不是处也不是false,其实并不是啊,他会有一个默认值,嗯,默认值就是false。啊,大概就是这样,这个呢怎么去体现啊,我也可以给演示演示给大家看一下,这里呢,我们先给一个false,你默认它就是这个值,OK,然后我们来看一下,在这个CAPTURE1里面,我们声明一个布尔类型的变量。
07:09
Is OK啊,然后为什么为什么这里这个布尔类型,为什么布尔类型的。变量命名是一字开头。啊,意思呢,就是是是的意思嘛,就是是不是这个OK的这个值啊,然后大家默认的一个用法呢,都是这么去写,所以大家在开发公司的一些项目的时候呢,看到一直开头的话,第一想到的是应该是什么,它是一个布尔类型的,可以用于判断的啊大概是这个意思,好这个时候呢,我是没有给这个一是OK啊去赋值的。然后这个时候我们先把前面代码注释掉,这个时候我们来创建一下这个capture的对象,然后我们再输出一下这个一直OK的这个值,好这个时候我们再来看一下。
08:20
它的一个默认值变成什么了?变成force了,因为什么在这个对象初始化的时候会默认给这个is OK,这个布尔类型默认附一个默认值,所以我们可以是可以直接输出它的前提是啊,它所存在的这个class里面啊,它被这个class被初始化了啊,就是这样。啊O不OK,好这一块呢,就是这个if,接下来呢,我们来看一下这个if else。它的写法呢,可以这么可以这么去写,就是在这个if的花括号下面,我们接着写else if。
09:09
然后接着再跟,再跟一个花括号是吧,再再写一个,再把这个OK放进来。是吧,大家我我不好。这个时候呢,大家可以是吧,人脑编译一下这些代码,它最终输出一个什么值,肯定是下面这个了。好,我们来调试一下,看看他为什么什么都没做。哦,这里是这样子的,在这里可以看到这样的一个问题,就是说if里面它的这个圆括号里面呢,我依旧是判断它是否是等于true,对吧,这个时候呢,我们需要给给到一个值,如果它是false的话,加上这个判断,具体的一个判断。
10:14
啊,他就是判断它是不是force,如果是force再进来,如果我不写的话,其实和上面的这个if呢,是一模一样的。啊,都是都是在判断它是否是true啊,这个时候我加上这个判断之后,你再看它的这个执行。是吧,这个时候他就进入到我不好在这个里面啊,大家也知道,哎,刚刚我没代码没写对啊,是我不好好大概是这样的一个情况,这里呢是比较初级的写法,还有一种写法呢,叫取反,给一个感叹号,一个感叹号。和和这个和这个is OK呢,去直接判断这个force是否相等,它俩是一样的啊,等价的,好,我们来看一下效果。
11:17
啊,大概是这样去写。好,这个呢,就是这个if和if else是大概是这样,然后它这个东西呢,啊,很有意思,就像毛毛虫一样,它是可以无限往下接啊,还有它可以继续往下接,这个时候呢,哎呀,我突然发现这个布尔类型里面。它只有两个值,我判断了数,然后又这里又取反啊,又判断了false,那下边这个我还我还能判断什么呢?啊没有办法判断了是吧,那这个时候呢,其实啊,我可以不写是吧,我可以不写。
12:04
不行,那那那么呢,他最终会进到这个里面。对吧,好这一块呢。啊,它基基于呢,这个布尔类型它只有两个值是吧,只有两个值true和false,那么这个L的这个这个过程呢,就体现不到了,那怎么办呢?我们把它注射掉,嗯,啊我们改成int int呢,那我的这些值我就可以随便写了呀,对吧,我来判断一下,一是这个I是不是等于零,如果等于零就大家好好接下来再改I等于一啊是我不好。然后呢,如果都不是的话,那我们都不好。好,这个时候我们我再来跑一下。
13:02
我们打个断点先进来,我们判断这个A线呢是零等于零啊大家好。好,我就把字改一下。接下来呢,它就不会啊,不会再在执行这个这个上面这个衣服快了,因为为什么呢?因为现在这个I。II不是零呢,它是一,那就直接走到这个里面,接下来呢,就输出这一句,我不好好这个,接下来还有一个关键点,后面有个else,后面有个else。最后面这里还有一个else,想问一下大家,就是这个else还会不会执行,其实是不会的啊,为什么?因为就是衣服if else它有一个特性,它有个特性就是说一旦像像这样的盲目从结构进入到其中一个环节之后呢,剩下的代码不会执行啊,不会执行我们来调试看一下,进入到这个输出我不好之后。
14:13
他就不会进入到else,直接跳到啊最后了啊,大概是这样啊,我不好。啊,这个过程呢,我板书一下啊,当衣服快。进入刚进入到某个剩下的判断结构,这样不会执行啊,大概是这样,这个概念一定要搞清楚好,这一块呢啊,我再把它改成个三。上面这个也不是,这个也不是,那就执行最后一个了吗?啊都不好啊,就这样好,呃,If if else的这个语法呢,大概就是这样,然后然后呢,大家还想还想起来,诶不还有一个Switch没讲吗?Switch呢,它不是我们玩的那个游戏机的那个Switch,任天堂要打钱好这一块呢,就是我们还是声明这样的一个啊特类型。
15:29
然后我们把A放到这个Switch里面,这个里面呢,它可以放各种数据类型啊,可以放int,也可以放字符串,也可以放各种。然后我们来看一下它的语法,Switch呢,它是这个语法的关键字,然后它和衣服判断呢,其实长得非常像,它有一个圆括号。云括号里面呢,它放的就不是布尔类型了,它可以放一个基础的变量啊,我放个印草三进去,然后接下来花这个圆括号完了之后呢,就接一个花括号,花括号呢就是这个结构体了,这个结构体里面大家可以看到它有个default default的话呢,啊,它这里有个红颜色的波浪线,其实这个东西呢,就是它默认生成的一个语法结构啊,实际上呢,我们要加上一个break break的一个主要作用呢,就是说执行到这个这个结构快了后,这个break就不会再执行到break之这个结构体也就不会再执行了,其实和这个最后的这个else呢,有异曲同工之妙,好,接下来呢,啊,大家就会有疑问了,那我这个int从0123可以举举例子,三个值呢,那这个方法体里面怎么去体现呢。
16:48
体现它这个判断结构呢,啊,我们来看一下这里呢,它这里智能提示的一个case case的话呢,就是它具体的一个值是吧,它这里面呢,有点枚举的感觉是吧,其实这个里面呢,也能放枚举啊,也可以放枚举。
17:07
这里呢,我就用这个123来来做这个演示了,012好,然后这个时候呢,我们来输出一句话。输出什么输出A,把A的值打出来啊,是这样,都不是都不是也也输出出来。好,这个时候啊,我们来看一下整个的执行逻辑,我们每个都打一个断点来看一看。好,当我们程序都进来了之后,这个I等于三,然后三放到这个Switch里面,这个Switch呢,会拿到这个I。去这些case块里面去匹配。如果匹配上了这个case块里的对应的那个数值的之后呢,它就会执行这个case下的这个,呃,代码代码逻辑我们来继续往下走。
18:09
这个时候发现什么,我们现在是三,但是K块里面的只有012,这个时候上面这三个都匹配不上,那我就只能进到最后一个保底的一个里面了,那就是deat deat就是什么呢?上面的全匹配不上啊,那就是我的了啊,就是这样。他是就是说做最后一个保底的一个处理,就是未知项的一个处理好,然后这个时候啊,我们看输出几。啊,直接输入三了,三的话呢,就不在这个里面。好,这个时候我再把它改一下,改成这个能跟K块匹配上的,改成一。我们再来看一下这里变一的时候,Switch拿到这个I的值I ii几S1,好,那么这个时候它应当就是进入到什么这个case块里面去,一的case块啊,大家可以看到。
19:09
这个断点直接跳到这里来了,然后遇到break之后,直接结束了这个结构体的一个判断,直接跳出来这个结构体,然后执行到最后的一个这样的一个执行语句。值得说的一点就是。当依附else的这个这个过程,这个毛毛虫呢,它越来越长的时候。啊同就是在这样的一个情况下。大部分场景下都是可以用这个Switch来进行替代的,这样的话呢,用Switch的话,它的语法结构更清晰一点,对吧。OK啊,本期呢,就先讲到这里。
我来说两句