00:00
那基本语法呢,咱们就说到这儿了啊,下边咱们看一看这个课后的这个题目,哎,往下走一下,首先呢,我们来看这个案例三,通过这个案例三呢,咱们来讲一讲啊,这个没有见到过这样的一个穿透的这种特征啊。S。Case的一个TEST1。好,这个题目的话呢,大家看看用Switch case怎么写。啊,因为我特意的强调一下这个Switch case啊,因为有可能你一不小心呢,你就想着说我这用if写多好写。是吧,哎,要求用three kiss。说呢,对学生成绩大于60分的呢,输出合格,低于60分呢,输出不合格,一看这个需求挺简单的,脑海当中立马一二就已经上去了,是吧。哎,注意所以是K4写啊。咋写?哎。首先呢,你是不是得定一个学生成绩啊。来定一个啊,学生。哎,成绩的这样的一个,哎变量啊,哎把这个成绩呢,你也附上值值,然后接下来的话呢,说根据。
01:03
需求啊。那这个A进行这个A分支了。那注意,这时候人家强调了,说不能用if else写,你得用Switch case写。啊,这是我们这个题目的主要的一个难点啊,就在这行第一个事儿的话呢,比较简单那一个,比如说score。哎,考了多少分呢?比如考了78分。好说下边的话呢,要求用Switch case了。那就这块写,那那很显然呢,我们把这个成绩呢,就放在这里边。呃,然后下边呢,得去匹配了。这个得长舒一口气了是吧?咱们就开始了K4考了零分是吧。不及格是不是成这样了?啊,不及格,哎,不及格啊。及格。行,这个呢,你还不能让它穿透啊,还得加个break,然后KE还是不及格。这个已经是有点儿不想写了。
02:01
啊,然后他就点点点了啊,一直呢到后边啊,来一个这个K啊100分。啊,这个叫及格。哎,Break后边呢,来一个比如说default也行。哎,对吧,成绩输入有错有误啊。哎,这样个情况,哎,就这么着,中间呢,这块省略的情况挺多的了,这要写写的话呢,这个本身这个需求,你看其实挺简单一个事儿,这个呢,你能写上好几十分钟啊,显然呢,这个写法呢,就不太靠谱了。啊,这个呢,但是好歹也算是方式一。啊,其实咱们开发也好,或者大家平时生活中我觉得也是类似什么呀,就是当你突然遇到个事儿的时候呢,你的大脑的第一反应啊,它就是有一种解决方案。但很多时候呢,你大脑中第一反应这种解决方案呢,可能都不是特别的成熟。是吧,哎,你就像这种啊,第一种解决方案呢,它其实比较简单,但是它简单的话,它有它的弊端,那就是你可能挺处理起来就挺复杂的。
03:04
这个我记得上高中的时候呢,印象很深,就是大家在处理那种解析几何的时候啊。好多年过去了,不知道大家还有没有印象啊?我记得我当时那个我们那个老师讲过,实际情况也确实如此啊,就是解决几何这种问题呢,就是你一看那题面上好像不太复杂,然后上去就开始咔咔一顿写,你往往发现呢,你第一反应这种解决方案呢,这个计算量是极大的。啊,就是在这块这个特征哈,诶然后呢,你要是呃,懂得它内部的一些相关的原理,一些技巧的话呢,这个你再去做的话呢,就是难度会大,但是呢,它处理起来计算量很小很快,哎,这就是解析几何这块的一个特征。你看生活中也是一样啊,就是呃,所以我们经常说呢,大家你遇到个事儿之后呢,往往要三思而后行啊啊,你认真想过之后呢,你再想到一种处理方案呢,通常都会更成熟一点。这点其实我也挺有体体会的啊,就是在工作当中有些事儿,突然一个事儿来了之后呢,有时候就咔咔咔就开始去整,事后你再想想,其实往往都会有更好的解决方案。
04:02
或者至少可以做一个小的优化。哎,所以大家以后呢,我觉得也可以适当的养,养成这样一种思维方式啊,OK,行,那这种方式不靠谱,然后呢,那怎么整呢。啊,怎么整说把这个题改一改,改成用是吧。别这样啊,嗯,那怎么弄呢。啊,除一个十是吧。啊对啊,这个你看咱们这个前几天讲这个随机数的时候提到过,说我们去获取一个一到100范围上的一个随机数。那这个随机数呢,咱们用的是ma.RYM的一个方法,但这个方法的话呢,它只能是获取0.0到这个1.0这个范围的一个随机数。当初呢,我们是不是让他乘以过一个100是吧。哎,它一乘100的话呢,瞬间这个数呢,是不是就膨胀了。那它从0.0呢,就变成这个100这个范围内的一个随机数了,哎,那现在的话呢,你这个数据范围呢,是从这个这个呃,就是大体上就是从零到100这个范围了,然后呢,我除一个数是不是也可以让它缩小。
05:04
那一旦缩小的话呢,这个情况不就少了,少了我们就好写了。哎,就是这个思路啊,所以说这块我们考虑呢,可以出一个十。行,那我们就这么来处理。好回过来啊,这个位置的话呢,这个scar呢,我去除一个十。啊,这个位置呢,没有说非得写变量,这呢就是个表达式的结果,只要是我们说的那几种类型就行。OK,然后下边我们去。写这个具体的case了,那这个时候呢,就舒服很多了啊。来我们找一下啊,这是它。哎,粘过来。这是K40的时候啊,K1。啊,也是这样。啊,K2啊也是这样行,这呢,我就抄一下了啊。差不多了。应该还得需要咱咱们往下捋一下啊,0123。六。
06:01
啊,七八。哎,这个九。九。十啊,正好考满分了啊,那这个呢,就是十,然后最后呢,我们再加一个default。看。哎,这么着啊,哎乘绩行,那前面这块呢,不瑞可都有,然后从六这块呢,叫及格的。哎,这么着,诶这个事儿是不是就完成了。诶,虽然说也花了一点时间,但至少这个事儿呢,我们是可操作的,上面这个操作呢,这就有点不太现实。这个写目前这样呢,是不是可以啊。来,我们去做一个编译啊。一。啊,一。哎,这个时候呢,我们输入的这个成绩呢,是78啊,它对应的就是个及格的一个情况,诶没问题。哎,但是这样写的话呢,你发现好像也挺复杂的是吧,远没有if else简单,哎,这个咱们等着再说哈,哎,那么我们写这道题的话呢,为什么我要出这道题呢?是想让大家呢,去体会一下这个穿透的一个情况。
07:07
啊,怎么来理解啊,你看这里边儿呢,针对于K401直到K45这块,你看全是同样的执行语句是吧。同样执行语句的话呢,这个时候我就想,那能不能就写一份呢。写一份的话呢,你按照这个顺序来讲,你肯定得写到这儿了。你要写到这儿的话呢,说比如说我要是考了40多分,一除以十呢,就是四了,那这块呢,我就诶从四进来的,但进来之后呢,他什么也没有,直接呢就蹦到五这儿了。所以呢,你就会想着说,哎,我能不能把这个给他删了,要考30多分呢。是吧,类似的这个道理你看。哎,我就这样来处理了。如果呢,你要考的就是零分,一直到50多分,哎,它可能匹配到相应的这个值之后呢,里边因为我们没有写break,那执行句呢,执行句也没有了。那这时候直接就到他这个执行据点,他也没有,那直接就往后走,一直就走到这儿了。哎,那么类似呢,下边也同样的道理。
08:02
这儿呢,其实就是case穿透的一个极端的情况。写完了。看着好像说,哎呀,这个还能这样写呢。可以啊。这就是K穿透嘛。对吧,只不过这个穿透时候呢,对于比如说某一个case时,我们这个执行语句就极端情况就是执行句也没有是吧,哎,这个break也没有那么直接呢,你就空着呗,空着的话呢,这个空行我也不要了,哎,就这么着。这呢就是我们说这道题目的啊,第二种方式啊,其实呢,去体会一下,这个叫哎case穿透啊。就他。好,那么这呢,我想写这道题呢,希望大家呢去体会这个知识点,单就这道题来讲,其实还有一种方式比这个还要简单。对,直接除以60是不是就可以了。对,刚才同学说加上40,再除以个100,呃,也不用那么复杂了,是吧。对,直接呢,我们就除以60就行,哎,方式三。
09:03
嗯,你看这呢,确实是更好的一种方案啊。哎,Scar呢,我直接除以60。那这个时候呢,你要是60分以下,不包括60分,不就是K40吗。啊,那对应呢,你就是不及格。那就他,然后呢,你要是60分及以上。就是一啦。这叫及格。就他,但这个时候的话呢,你要120分。嗯,120分的话呢,要出,呃,120分的话呢,这个出完以后是二了是吧?啊,那还是有这个defat可以去操作的。当然这个是看啊。哎,不对,这个是一一百的话呢,除以60啊还是一点多还是一是吧。对你110分的话呢,相当于也是。对,110多这个成绩相当于就就变成就跑这儿走了,你要是我们要是考了一百一百一,111吧,除以十这块就是11了是吧,他就走到这儿了,就这块儿稍微有点区别是吧。
10:08
啊,稍微有点区别啊,对这块呢,稍微注意一点,就是严格上来讲好像还差那么一点点是吧,OK啊行,在总体上来讲的话呢,其实这道题我们用if else写其实是最合适的啊,这个呢,特意要求用它写的,就是我们通过它呢想说一个小的知识点而已啊行,这呢算就我也写成是一个方式三了。嗯,就放在这儿就行啊,保存一下,做一个编译。来运行啊,这呢也是一个及格的情况。好,那么这道问题呢,咱们就说到这儿啊。好,接着我们再来看一道关于wi k这道题目,这道题目的话呢,也是应用到了这个穿透性啊,这个穿透性的话呢,相当于体现的就会更好一点,什么意思呢?就是这个同样的需求,如果你要是用来写的话呢,就没有用S好。来,我们看下这道题,说呢编写程序,从键盘呢输入2023年的month和day,然后要求呢通过程序输出,哎,你输入的这个日期呢,是2023年的第几天。
11:04
那有这样一个需求问题,来,我们把它那粘过来,CTRLC。啊,新建一个展览程序。啊,Switch。哎,His的一个test,这该二了啊。哎,这呢是咱们这个一个案例或者叫练习啊都可以。啊,CTRLCCTRLSCTRLV啊保存一下。嗯,首先呢,提到一个需求,说从键盘输入2023年的ma和D啊,这个呢,我们就使用这个scanner了。哎,所以这里边儿呢,第一个啊需求啊,第一个操作的话呢,我们是针对于scanner的一个使用啊,这呢,我就简单写一个这个操作的步骤啊,使用scanner啊,然后呢,从键盘诶获取这个2023年的。啊,2023年的这个一个呢叫month的一个变量,一个呢叫day的一个变量。
12:02
相当于呢,我们得调用这个两次next int这个方法,OK,行,那么这个获取完以后呢,下一步他呢,没有提说你怎么去写这道题。啊,只不过呢,我把它呢放到咱们这个three case这块了,所以我们可能就会想three kiss了啊这道题的话,你可能不用three case,你用if也可以去试。等等啊什么呢,这块呢,我们说用search case要更好一点,那就具体的看,诶case呢,这块应该怎么去写啊。具体的是吧,使用啊Switch case。啊,他呢来去啊实现啊一个呢是这个分支,这个分支的话呢,主要涉及到就我们这个月啊,啊你可能是一月的啊,也可能是二月三月一直到12月的,每个月份呢,对应的这个啊某个月的第几号是吧?它对应那个天数呢,是不一样的了啊签的话呢,这个你可以就把当前的这个对当月的这个加一下,然后再把前几个月呢,你再累加一下就可以了。啊,实现这个分支啊结构啊,然后呢,在分的这个过程当中啊,我们涉及到一个点哈,叫计算是当年的第几天,这其实就相当于在计算这个总天数,所以呢,你还需要呢,去定一个额外的变量来去记录这个总天数累加起来,然后最后呢,把这个结果呢,给它输出一下就行。
13:18
啊,这呢,就我们整体上这样一个套路啊,这呢我就写的比较简单了啊,第一点和第二点行,那首先呢,针对于第一个需求,关于scanner使用这块,我们再去熟悉一下,做一个复习了,那第一步呢,我们需要呢做一个导包。哎,Java点哎U。第二哎,Scanner,注意有个分号结束。那昨天呢,有同学在发微信问我说这个scanner这块怎么老不对呢啊,结果最后发现他少了import了。这个记得给他加上啊。行,那这个完了以后呢,下边呢,我们就需要呢,创建它的这个对象啊,这个呢,就直接声明这呢其实也算是一个变量了,哎,后边呢是一个变量名,这个名呢,你叫什么都行,只不过说我们叫建明之意了,你叫scanner也行,叫scan也行,那有同学呢,我们就叫做input也可以。
14:04
啊,这个都行,好,另外一个scanner这个小括号后边呢,记得里边有一个参数叫system in。这是固定格式啊,先不用问为什么,直接你就这样写就行,然后接下来的话呢,我们就需要呢,根据提示从键盘那获取相应的mass和D。说请输入2023年的。这个月份。啊,然后这块呢,你就直接的去写就行,哎,我们通过这个input呢,点去调这个next int这个方法。那我们就获取到了这个mass。嗯,好,然后呢,咱们也提到过,说这个方法呢,相当于一个叫阻塞式的方法,这是我们第一次呢提到的一个词。阻测式的这个方法,也就是说呢,当我们这个程序呢,去运行的时候呢,它一旦执行到这个方法的时候呢,它在整个这个控制台上呢,这块就光标在这闪,等着我们去输入呢,如果呢,下边有一些其他语句呢,注意这个语句呢,现在都不执行,当你一旦输入完成以后呢,我们一回车这个呢,他就认为你这个输入的这个操作就结束了,当你输入的这个数据呢,就付给了我们前面这个mass了。
15:10
啊,那么大家呢,下来有没有尝试过,你比如说。现在的话呢,我们需要呢,输入的是一个数值,如果你写个A会怎样呢。哎,这块就直接就报异常了。啊,叫input mismatch。啊,就是输入的不匹配这样的一个异常。那这呢,以后我们讲异常的时候也会说,你说我们这个程序写的有有问题吗?我们也只能这样写,但是呢,用户呢,就是不按照你的要求去输入数据,这呢就出现这种异常的问题了。啊,以后我们专门讲异常的处理好,那这呢是我们输入了一个叫月份,然后接着呢,CTRLC再来一份。这个再来一份的话呢,我们就没有必要再去造一个对象了,对象就还用原来那个就行。嗯,他的这个月份,他的这个天是吧。啊,这呢,我们就获取一个叫做D。
16:00
行,这样的话,我们就获取了这个mass和day这样的两个变量了,是从键盘获取的,然后呢,这块嗯,下边写二之之之之前是吧,咱们先把最后这个操作呢,你直接给它加上啊,因为很很容易呢,你就给他忘了,最后呢,我们需要呢这个scanner。啊,一定呢,得去调它的一个close操作,这个呢,我们是为了防止。啊,这个就叫内存的一个泄露了。啊,就是如果谈到内存泄露呢,举例这其实就是其中的一个例子,你要是没有加这句话呢,你说我们编译运行会报错吗?不会对,这就是内存泄露的特点,为什么说我们在实际企业开发当中,这个内存泄露呢,大家一定要去关注呢,因为呢,它不是说像出现异常一样,说一出泄露了立马就报错了,如果是这样的话呢,我们就很容易呢去找这个泄漏问题了。但往往呢,它就是隐藏了。比较深是吧,程序呢,你看运行啊,正常用户去访问也都没有问题啊,也都可以访问,实际上你发现呢,这个上线以后呢,这个呃,最后你发现的这个用户呢,隔了几个月之后,他访问的时候呢,就越来越卡卡顿,相当于整个的线上这个系统的话呢,感觉性能呢在变差,但其中的一种情话呢,就是说呃,因为它后台呢,会持续性的进行这个大机的回收。
17:14
啊,你想想啊,我们这是内存嘛,内存呢,假设就这么大空间,现在呢,里边你有好多这个内存空间都给占用了,那我们进行垃圾回收的时候呢,如果呢,他要是垃圾这不就回收掉了,回收掉以后呢,你下次呢,用户再去往里面去填数据就行,但问题现在有好多的泄露问题。假设呢,你看这五个甲都是泄露,他要泄露的话呢。回忆一下,咱们讲吸路的事儿哈,就是他明明从我们成员的角度来讲呢,这是垃圾,但是这个垃圾回收器呢,判断出他不认为他是垃圾。也就是说呢,来一圈这个GC之后呢,发现它并没有回收掉,那你现在可用的内存空间是不是就越来越小。那就会导致我们这个垃圾回收的行为就越来越。频繁。是吧?你想原来呢,这个我们这么大空间,我满了的时候呢,我回收一次,现在你可用空间特别少啊,是不是就导致你老是回收。
18:03
是吧,你回收的越频繁,这个在垃圾回收的时候呢,我们用户啊,要执行的那些操作呢,就得停止。啊,那就是你得等着他回收完以后呢,你再去操作,你想想他特别频繁的老做这个垃圾回收,那用户呢,执行他不就老是被中断了,那体现出来了就是老卡。啊,那这时候你就要去通过相应的工具呢,去做这个监控,找到哪些位置有泄露。然后把那个泄露呢,你给他适当的处理好以后呢,JC就认为哦,这是垃圾了,它就给你回收了,所以这是高级的内容是吧。大体的原理,哎,就我们刚才说的这个事儿啊,回过来那就说这个操作呢,你别给忘了,你忘了以后呢,程序呢,其实它你是感受不到的,他也不会给你报错的,但是呢,这种情况呢,少一点点还行,但是一定要积累的多了的话呢,就一定会影响性能的啊。好,这个完了以后呢,拉回来,我们这个题目的重点呢,是看Switch case啊。嗯,那咱们就来写吧。哎,刚才也提到了,说我们在这个需求当中啊,需要判断是当年的第几天,那咱们是有必要呢来定一个变量的啊,哎,这个变量呢,不妨我就叫做sum this。
19:09
啊,一开始呢,就是零,他呢来记录啊,所谓的这个总天数,也就是我们这里边儿提到说第几天。OK啊,那么具体该怎么去写呢?哎,大家呢,因为刚开始接触这个编程,可能也没什么感觉啊。哎,我觉得这里边儿有个小的技巧。啊,这个什么技巧呢?呃,编程呢,大家今天才学到第四天。但是呢,数学啊物理啊,这些包括生活常识啊,你要数学物理可能从小学开始算,你要算生活常识的话呢,从出生就可以算了。哎,我们积累了其实很多解决问题的一些思路了,那如果作为程序来讲,你可能不会写,那你先把它看成是一道生活中的题,或者是一道数学题,你看你怎么做。你比如说啊,我们现在写一个啊,说我想判断一下这个2月5号。哎,是当年的第几天,你咋做呢?
20:01
看成一道数学题是吧?对,那你想一月份是31天,你再把你二月这五天一加,这不就是第36天吗。对吧,就这样啊,那你说来一个这个11月5号呢。对,你得一月的加满31天,加上二月的,二月你小心一点,你得看一下这一年是不是闰年是吧?哎,闰年就是三,嗯嗯,29天。平年就是28天,对,这是一个生活常识,你说我也不知道。不知道,那就得补一下是吧,哎,这个生活常识你得知道的啊,所以呢,学编程里边其实有好多都是我们一些生活当中一些东西,包括呢,诶更高级呢,就是梳理逻辑啊,都集中在里边了。行,这个呢,才凸显出你这个工作它是有价值的,怎么要不怎么能撑得住你这个。这个上万的几万的甚至更高的这个薪资呢,是吧。嗯,或者换句话来说的话呢,大家现在就相当于在爬这个墙头一样,这是一个高墙啊,现在呢,大家都是咱们都是算是小白了是吧?哎,初学者哈,这个墙的话呢,现在爬的过程当中,你会觉得说越高越痛苦。
21:08
越越高越难是吧,哎,但是一旦呢,你想你要是爬过来的时候呢,你跳到墙内了。你应该开心一点。啊,或者你应该希望这个墙高点是好事。现在爬的时候呢,你你觉得是越高越困难越不好爬,但是你一旦爬完以后呢,你说这个高点是好事啊,别人进不来呀。是吧,啊,你像以前学这个安卓学iOS那个墙就很低啊,所以对于初学者讲,这这太简单了,这好是吧,诶学上甚至说你学了四个月的时间,那出去上来就一万多,而且比比比现在这个咱们大家毕业的平均薪资还高。啊,有的一开的14000,一万五一万七,甚至说这个有的项目的话,实在没有人了,上来你可能刚毕业啊,直接就奔到2万以上了,特别开心是吧?啊但是那时候你要想个事儿啊,大家作为初学者来讲,这个强头呢很低,你很快的就进来了,是个好事儿,很兴奋啊,这个亲戚朋友呢,赶紧都拉着进来是吧,然后呢,一旦你今天政府这块这个人就很多了,多了之后呢,就麻烦了,你发现他不自觉的又给你拉起一道墙是吧。
22:07
诶大家呢,这么多人,那这块呢,企业招聘的需求没有那么多了,那这块儿我就从这里边儿要挑这个好的了。啊,那对于咱们学这个Java或者大数据的同学来讲,这个强呢,相较于比如说学前端移动端,学测试,学运维,学UI,学产品是吧,都要高一些,但是现在学的时候呢,高一点,但是你进来之后呢,你会更踏实一些。啊,就跟看那种僵尸片一样,这个越高了你不是越踏实嘛,是吧?啊,别人进不来呀,OK,而且随着你的技术不断的增高呢,其实你自己无形当中,你给自己呢,在原有的这个强的基础之上呢,你自己呢,越站越高,别人更不容易超过你。啊,这样的啊,但是你要是在企业里边你就颓废了是吧,天天就回来呢,该打游戏打游戏,到公司呢就天天划水,你自己呢就在这拆抢呢是吧。拆的越来越低,别人一跳就把你掏过去了。那你就失业了吧,就是这样啊,好拉回来,好,那现在我们要算一下这个10月5号,那很自然而然的,我就应该把前面一月的加上二月的加上三月的AA一下给它加起来,最后呢,再把这五天呢,再加上就是总天数。
23:10
OK,行,那么这个事儿呢,说清楚了,下面的话呢,关键就是把你这种生活的常识,或者解决数学问题的这种常识,怎么给它转化成程序,这个是需要大家不断的刻意练习去强化的,点这个呢,不断的去写才能强化,然后这个一旦你强化成了以后呢,这个事儿就成了。相当于你把你以前多少年积累的这个数学当中这个东西呢,全部转化成程序的这个角度了。啊,就没啥问题了啊OK,那这块回过来怎么弄呢。哎,刚才提到了一个点,说我计算几月几号是吧,那不行,咱就一个个写一写呗,根据呢,我们这个暂呢,我们去做这个判断啊,所以呢,我把这个暂呢就哎放到这里边了。哎,就放这里边儿了,那这个月份的话呢,情况就很多啊,如果呢,你是一月份的。一月份呢,比如说1月5号啊,那这就是当年的多少天之间的这个some days,哎,它不就是这个day吗。
24:05
是吧,哎,就他啊,然后这块呢,我们可能先想到就是加一个break,就别让它穿透了,然后你要是二月的呢。哎,一月的是31天,再加上你二月这个day是吧,哎,加个break。哎,加三月的。哎,31天至一暂的加上28天加个对对,说到这块的话呢,再稍微说一下,大家写的时候,写的时候你会想这是二份28天,那也有可能用户在一开始输的时候呢,有可能又乱来了。说他这块呢,他就写个三月的,呃,35号是吧。那其实这是非法的。非法你这块呢,要目前来看的话,其实是限制不了他的。哎,这个注意啊,哎,你当然也完全可以去写这个一夫一句,比如判断一下你这个你写的是哪个月,这个月呢,你这个数呢,你不能在指定的范围内,这个其实就有点复杂了哈,哎,真正在开发当中呢,这种限制呢,我们是使用正则表达式来做的。
25:00
很简单,一个串儿,我们就能限制用户的这个输入数据的合法性,现在呢,咱们就先假设用户输入的是合法的啊。好,这个我们在这儿。哎,假设。哎,用户。哎,输入的这个数据啊,是合法的。啊,因之呢,就是你这个月份跟这个天呢,你别乱来哈,哎后期哎,我们在。开发中使用正则表达式进行校验。OK啊行,这就过了,好这呢是我们说这个三月几号的情况,然后呢,哎,接着这个接着加个break啊。后边呢,再来一个K4,然后再some days啊,一月的加上二月的加上三月的135也是31是吧,加上day,然后再来一个break。然后这块呢,就接着往后写,诶刚开始的话呢,这个感觉诶你看挺好是吧,哎,叶雪就觉得这个事儿啊。越写越长。啊,一直到最后咱们得写到K12是吧。
26:03
对,这个时候你这个some days的时候,你得一月的加上二月的,呃,再加上这个这个等等等,一直得把十月的也得加上。是这个A是31吧,两个对是吧,来加上瑞。一三五七八十腊啊,腊是12月是吧。这是30。好,那这时候得这样去处理了,这是11月,这是12月,这个day行,然后最后呢,你再来个default也行。呃,Default的话呢,这个呢,就是你这个。呃,相当于呢,不是一也不是到12呢,这个咱们假设上面就合理了,那这个其实就没有意义了是吧。行啊,那么这样的话呢,我们把这个就计算出来以后,最后你再做一个输出,哎在这写说哎是当年的第几天。嗯,这个我们来说,嗯。2023年的。
27:01
月啊。这个对。是当年的D。Some days,天。诶,这不是整个呢,就这样一个逻辑嘛,行,然后这块呢,如果我们编译呢,当然肯定会报错了啊,你看我这写点到点了哈,哎,这个过程的话呢,大家就发现呢,我们这个越写越长,正常来讲其实是一个三角形了哈,这一项的话呢,是一一,如果看成是一个星的话呢,这就是相当于俩星了。这就相当于是三个项三个形啊,以此类推,越来越长,而且你还发现长吧,这是一方面哈,另外一方面就是你下边这一行里边的前边这一些项是不是上面已经出现过了。对,像这种情况呢,我们几个词啊,叫做冗余哈。用余啊余多余多出来的啊,就是明明呢,如果我们要有其他的方式呢,不去写,那相当于你写的这种方式呢,这就是一种多余的写法,繁荣是吧。哎,这个呢冗余,冗余的话呢,我们就想说能不能把它做一个优化,所以这呢,你可以看到是我们的方式一,但是呢不推进。
28:06
好,那整个呢,关于这个结构呢,我就把它给注释了啊。啊,那么这种要不推荐的话呢,我们就要考虑说有没有解决这种冗余的方式。哎,这个我在这写一个啊。哎,说存在数据的一个冗余哈。那怎么能够解决这个问题呢?啊,同学提到说倒着写是吧,哎,这个想法怎么来的呢?你发现呢,你下边这个数据呢,在上边出现过,那我能不能就是呃,写这个的时候呢,我就用一下你上边的,你要想用呢,在我们three case里边,你得把上面这个要用的呢写到下边。是吧,比如我先写12,写12时候呢,如果没有DA,它不就蹦到11那了吗。哎,11那块你以前写的东西,我不就我不就能用了吗。哎,所以说我们就要想到,诶倒着写。你说我怎么想不到呢?刚开始你想不到也正常,你要一开始想到了,你想我得多惭愧是吧?
29:01
我刚开始我也想不到是吧,哎,所有东西你都在做,之前呢,你都想到了,那么你都是做的开创性的东西。OK啊,更多的你是踩在前人的基础之上去往前推进的,是吧?好,这个呢,我们把这个mass呢转过来。哎,在这里边儿呢,我们就先来考虑写这个12啊,但写12呢,你可能说呃,思路上有点一下接受不了,不知道怎么弄,那你就先还是写。第一月的先写这儿,然后呢,你往上推着写。OK哈,行,那我就还写一月份了,一月份的话呢,怎么弄呢。Some days。还是个D是吧。好,嗯,这个呢先写上吧,然后二暂呢,你往上走。K2,哎,这怎么写?Farm类似。哎,你可能一开始想到的,比如说我就写了一个叫一月份的,这是31天。你看这样啊,假设呢,我们现在呢,输入的是2月5号。
30:00
现在呢,直接呢,K4就到这儿了。2月5号呢,是多少天呢?你先把一月份的天加上。然后呢,诶没有break,直接让他再蹦到下边,但这蹦到下边呢,应该是在加上五是吧。又不能再重新赋值为五了。所以这个符号呢,不能用等号,不能用负值的,应该是加等于。对啊,一月份的31天,你再把这个二月份的这五天加上,这不就出来了。啊,那同样道理,如果你要是,诶三月份。那这个位置呢,你可能说先复制为二月份的这个值。对,然后再加上一月份的值,所以这个也不能用逗号。是不是应该加等于,那依此类推的话呢,所有这些位置都应该是加等于。那么在二这块呢,你其实这个31呢,它指的是一月份的。总天数吧。哎,然后这个呢。哎,他呢,对是二份的这个总天数。诶,然后呢,不要加break,我们就想利用它这种穿透性。
31:00
如果你输入的是3月5号,是不是上面都不匹配,直接一过来,先把二月份的28天在零的基础上,我们一开始复制为零了啊,加上28,然后呢,接着呢,再加上一月份的31天,再加上你三月份的这五天,这不就成了吗?哎,就可以了,所以说这个思路呢,就出来了。Some days,哎,这个得加,等于这个我一会儿整体来处理吧。这种情况呢,这就依次的。这是五月的。哎,这个,哎,我这么着吧。你看够了没啊?这是1234,这是五。6789。十月的。哎,11月的啊,12月的这个标了。
32:02
12月的。行来我们去捋啊,呃,这个呢是二这块写的是一月份的啊,这是二月份的一三是吧。五。咱不是一三五七八十大三11天永不差是吧。一。三。五。七。五对吧。五就是你五得写到六点啊,1357。八。十。这是吧,那嗯,不用管了。这个呢是写11份的38。剩下的都30。诶这不就成了吗?你说一三五七八十纳这个事儿不知道不知道,你你百度搜一下,说一年当中哪些月份是31天呢,你搜一下是吧。你说我都不知道,每个月都天数不一样,那就无语了是吧?好,那么这个事的话呢,就成了啊,中间不要加上break,那如果说你这块呢,我就想判断12月的这个20号是当年多少天,这不就直接上来从这进先把十月的加上,再加上十月的九月的八月的1414往下走,那然后最后呢,再把你诶12月的这个20号这一天呢,再加上,这不就成了吗。
33:16
哎,整个这个思路呢,是不是就这样来处理就行。OK啊,那最后这个break的话呢,这个可加可不加,因为你后边也没有其他的这个语句了是吧。哎,就是我们说的这样一个情况啊,好保存一下,哎,尤其啊。嗯,这是我们的第二个啊叫Java。免二。好,这个呢,请输入2023年的几月,这个咱们来一个咱自己能算出来的啊,比如我算3月5号吧。咱们先自己算一下啊。31加上28,再加上五等多少?64吧。哎,第64天,哎,没有问题。行,那这道题的话,我们就这样来进行处理,这里边儿呢,呃,使用的叫case穿透,另外一点的话呢,如果这道题你想试图改成if false,你发现的体验并不好。
34:09
哎,这呢,就恰好利用了这个,它独有的这个特征叫穿透性。啊,那前一道题的话呢,我们可能还觉得说用if else呢,好像更好一点啊,但是这道题呢,就是显示出它的一个优势来了。好,那么基于咱们讲的这两道题目,包括这课后的话呢,还有一些题。那这个简单,咱们就搂一眼啊。那课后这块还有一些练习题,先来这看吧,说呢从键盘输入这个星期的整数值,然后输出你对应星期的这个英文单词啊,你要输入的这个一的话呢,把曼输出来,二的话呢,就Tuesday,以此类推。哎,这一题的话,咱们就不可以讲了,大家下来呢,可以去写一写的啊,哎,我们就稍微做个剖析。然后这块的话呢,你输入的是一个叉。那你输入的是这个叉啊,然后呢,根据你输入的这个叉呢,把它转化成对应的这个大写的那叉呢,我们说呢,也是能够放到Switch的这个表达式的这个位置,支持这个叉类型啊没问题。
35:05
啊,这个也不是特别难,然后这个的话呢,是输入这个成绩,然后根据成绩呢,对应到它的这个等级上,有这样的一个关系式,这个关系式的话呢,如果用if写的话呢,大家应该都比较好写。呃,但是呢,你注意这时候呢,让你用Switch case去写的。啊,你可以考虑呢,正常还是除以十是吧。啊,当然除以十呢,这个题呢,能用是因为这里边儿这个小细一点啊,这个70分呢,它正好这个等号也在这儿呢。对,你看要是他特别恶心的啊,他如果要是把这个等号去掉,它放在这儿了,这个事儿就真恶心了。你要考了70多分。你要用除十的话呢,其实包括70分本身它都是这个结果是七是吧,当然结果他把七七十放这儿了,那这个事儿就很麻烦了是吧,所以这个题目呢,这个巧的地方,它恰好还就给你把70起的都放在一起了啊。应该能能知道我说啥了是吧。明白啊行,然后呢,下边这个这个题呢,看着好像挺热闹的,其实也挺简单的。
36:05
说呢,你输入一个年份,然后这个年份它自动就给你输出,它是,哎十二生肖里边哪一个这个12呢,相当于就是一个整个周期一样了。所以我们其实呢,就拿这个年份去这个取模12,看这个余数是几啊。哎,这样一个方式就行,诶,因为每隔12年,它不就正常轮回一遍吗。哎,就可以了啊,所以这块呢,其实就呃,你就先想一想,比如说今年啊,2022年呢,它是。虎年是吧?哎,虎年的话呢,除以12呢,你发现它这个余数呢是六,所以说你匹配的时候呢,在六这个位置呢,它就是虎年的意思。你再加上12年以后呢,他取模12还是六啊,还是虎年,那你要是明年2023年,那这时候呢,他再去取模,就是余数是七七就是兔年。就这样的思路,所以这块我们就是让他跟12有一个取模操作就可以了。啊,就这呢,其实整个呃,语法呀等等的啊,基本题面呢,跟我们前面都差不太多,就是这个这个处理的细节有点不同。
37:02
这个呢是呃,一个挺有意思的这个题,大家呢,可以试着呢下来写一写,这个咱们就不讲了哈,说呢,你随机的产生随机数讲过了,产生呢,三个一到六的整数。然后如果这三个数相等呢,就叫豹子。这个三个数的和呢,大于九呢,这叫大啊,小于等于九这叫小,然后你去压一下,看看压的对不对。这个你跟这个程序呢,玩个游戏,这是随机生成的,然后你自己再去压一下。啊,结论呢,就是说大家就不要去赌博了是吧。这个概率有点小啊,OK,行,这是我们这道题答案也都有啊,大家可以下来看看行,那前面呢,就我们讲的这样的几道问题了啊,然后呢,诶这块呢,就提到了if else之间的一个转化关系,那最后呢,咱们也相当于是做一个总结,关于分支结构呢,就讲完了if else和three case,那讲完以后的话呢,哎,就我们启示什么呢?就是开发中我们涉及到分支了,到底我们应该选择哪一个,这呢,我们就要提一提他们二者之间的一个转换。啊,这是提到第四点啊。哎,四分之K与啊,If else。
38:03
哎,他们之间的一个哎转换啊,那么大家呢,感受一下,如果在开发中需要用到分支的,你会怎么选择呢。你选哪个?啊,刚才给了大家说具体问题具体分析,这句话实在是无法反驳是吧?对,你去哪个场景都可以去这样回答是吧?啊,说这个这个事儿怎么办呀,急死了,说这得具体问题具体分析了是吧,你去问医生,医生我这病怎么看呢?这得具体问题具体分析是吧,那就麻烦了是吧,跟没说一样啊。哎,当然了,这句话其实是很对的啊,有的时候我们不能一句话把它说清楚的话呢,只能这样。啊行,那这个所谓的具体问题具体分析那。怎么着啊,咋分析啊。能啊。
39:01
哎,对,咱先这样整体让范范去说哈,呃,首先提一种感觉吧,如果现在需要分支量,你自己会选哪个吧。你会选这个,那为啥呀。对,就是我们他这块呢,在讲的时候不像这个Switch,你看一上来,首先关于类型这块有限制。那要是不是这一类型呢,你肯定得只能用了,这是其一哈,其二的话就是即使能是这个类型,你发现他这个数的范围太广了,比如让你判断这个数是正数还是负数,你要用s sweet case,那就。写不了了。啊,那就相当于呢,呃,不光是类型上有限制,而且这个case这块呢,我们发现呢,它匹配的情况也得有限,我们才能够用思维case,否则的话呢,你用。他呢,也不靠谱,还得用if。也就是说呢,从整体这个使用的场景范围上来看呢,我们说它是要更广的。或者换句话说呢,能够使用Switch case的这种场景都可以转化成。
40:00
包括咱们刚才讲的这里边这个这个题目哈,我们也只是说呢,用three case呢,更能体现它这个好处,它有穿透性嘛,是吧,但是并不是说这个我们不能够写成。可以写。没问题的啊,行,那么这个拉回来呢,首先这里边儿我们强调的第一个点啊,就是开发当中,凡是能够使用Switch case的地方都可以转化成。嗯,开发中。凡是可以使用。啊,Switch case的这个结构的场景。啊,都可以改写为。哎,这个if else。那如果我们要画一个这个呃,使用范围这样一个图的话呢,那就相当于这个外边这个圈啊,里边这个圈啊,外边这个很显然的就是if else了,里边呢,就是这个Switch case这个场景。能够用它的都能够用它,反之呢。不成立啊。哎,反之不成立,哎,那就意味着话呢,就是哎大家呢,可能会去想,只要呢,开发中遇到分支的,那我就用1S得了。
41:08
哎,你看如果要是那样的话呢,那这个JDK呢,就慢慢就给你把这个就给删掉了是吧,也不会给你保留两了,咱们逆向思维的啊,哎,那下边呢,就是要说个第二个点了。哎,第二点就要说的时候呢,诶要强调一点啊,如果我们在解决一个分支结构问题的时候,发现既可以使用case啊,又可以考虑使用了。而且差不太多是这种难度上呀,或者这个写的复杂度上差不太多,那么推荐呢使用。Case是吧?哎,那这一条按这为啥呀。哎,因为它的效率呢,稍微的高一点。啊,这让提到啊说啊,那下边一个啊说开发中说如果呢,呃,一个具体问题。啊,具体这个题目啊,说既可以啊使用。Case。然后呢,又可以来使用if else。
42:02
哎,并且呢,它这个难度呢,都难度系数差不太多。这个我就不具体写这句话了啊,比如我们刚才说呢,呃,去算100以内的这个,比如说及格啊,不及格啊,包括一些具体的场景,如果呢,你这个case呢,要是用case写,写的这个情况特别多,那干脆你也不要用它写。就是它的难度写起来也差不太多的情况下啊,那这时候呢,我们推荐呢。啊的时候啊。推荐啊使用。哎,这个是不是可。哎,如果这时候再不用,那S就没有意义了啊。啊,那这时候就提到说为什么。啊,那就是哎位置case。哎,相较于啊这个if else。哎,它的这个诶效率呢稍高。哎,这样啊,诶为啥呢,这个if的话呢,我们其实是可以进行这种范围的这种判断的。啊,就是做范围判断呢,相对来说就要复杂一点了,而这个呢,就是等。他直接呢就上来去匹配,跟谁一样,哎,就是从这个怎么讲呢,从这个复杂度上来讲啊,这是数据结构的一个概念了,比如说我这个写的是一是吧,它相当于呢,就是列出来了这样的几种情况,它可以直接一步到位的去。
43:13
定位到这儿。而你要是E这种呢,它可能有这种范围,它就一个一个的这样去往下去走,有点像时间复杂度里边呢,它像这个on级别的,而它呢是一个常量级别的。啊,所以这是它俩的一个区别,那这个概念如果大家不太明白呢,我们后边讲到数组的时候再说啊,你先记得就是它的效率要稍微的高一点点。啊,就是这样的情况,那么具体来说,它俩有没有一些细微上的体会的不同呢?我在课件里边这块放了一个,咱们就看一看就行啊来稍微的提一下,说if这个结构呢,呃,它的条件是个波尔类型的啊进行判断,它的使用范围更广。毫无疑问啊呃,然后呢,这个Switch的话呢,它的这个使用场景呢,就比较窄一些啊,这个咱们刚才已经说过了,这是它的一个优势,然后这个Switch这个优势呢,就是在二者都能用的这种情况下,而且复杂的情况也也也差不多,那我们推荐的使用three case,因为它的效率呢稍微的高一些。
44:08
啊,另外呢,独有的一个Switch的一个特征就是它有一个穿透性啊,利用这个穿透性呢,比如像我们解决这个问题的时候呢,体验呢就会更好一点啊,能够解决这个代码的一个冗余度的一个问题。行,那就完事了。啊,就完事了啊,关于这个分支结构咱们就告一段落,那课后的练习题大家呢,也可以下来呢,再去做一做就行。好,那么刚才呢,我们讲到这道题的时候呢,你看我这儿呢,是2023年的,那如果说这块我们把这个年呢,也做成从键盘输入的一个数。其实也可以。诶大家呢,下来可以把这道题呢,你试着再做做,哎,你要输入年的话呢,它的一个问题就在于这个年,你需要判断它是不是闰年是吧。他如果要是闰年的话呢,就会影响我们的这个数据。对,那就相当于如果要是闰年这个位位置的话呢,我们其实就在Switch case里边,你是不是可以再套个。
45:01
说如果你要是闰年我就29加29啊,你要是平年我就加28了。这样啊,那么怎么判断一个年是闰年呢,在咱们这道题的这个里边呢,其实也有,大家你可以参考一下啊,我这写的这个。嗯,在在后边这块哈。在这是吧,诶如何判断一个年是闰年呢,这块有个标准,这个都比较简单,你看这个标准呢,进行判断就行,刚才说的这个拓展的这个题目呢,下边有答案,大家下面呢,也可以参考着写一写就行。
我来说两句