00:00
好,这个结结构完了以后,我们再来看下边这个题说呢,根据指定的月份打印该月份所属的季节啊,月份我们知道有12个月,345的话呢,都是春季啊,678都是夏等等,这个是不是就可以使用咱们刚才讲的这种情况啊,对啊,大家下来呢,来写这道题啊,下来来写这道题,然后现在呢,我说一下这个第四题啊,哎,第四题这个题目是这样的,说从键盘上输入2019年的month和day。从键盘上输入的要求呢,通过程序输出啊,你输入的这个日期呢,是2019年的第几天。哎,有这么个题目啊,看看这个题该怎么做呢。哎,有时候拿到这个题呢,一点思路也没有。很多时候呢,拿到题思路没有的话呢,这时候你就先拿一些具体的情况举举例子是吧,写着写着有时候这个思路就来了啊,CTRLCCTRLCTRLV一下啊,比如说呢,呃,这个你自己先假设一个,比如我们现在输入的是个二月啊15号是当年的第多少天,你先看看你自己先别想程序的自己怎么去做这个问题,对,那你就把一月的31天加上这个15天就完了是吧,那我要是写了个5月7号呢,那不就是一月的加上二月,二月你得看一下一九年是不是闰年了,对,肯定一看就不是,是吧,连武术都不是哈,那个二八。
01:44
然后再加上三月的31,加上四月30,再加上五月的这七天,对那类似的这个是不是基本上这个思路就差不多就确定下来了,哎,然后你再看看,哎,我输入的是一个变量了啊,慢day怎么去计算一下这个总和,就这样来考虑啊,行,通过这个题目呢,咱们其实想说明一下关于这个break的问题啊,就是说在这个Switch case当中,这个break其实不是说非得要写的啊,这呢就是我们想说的一个例子啊,来吧,咱们看看怎么做这个事儿啊。
02:27
嗯,这个题呢,虽然说我们写在这个Switch case这块,但是你也可以考虑说用一奥写。啊,通常呢,咱们从这个经验上来说呢,啊,Case咱们也讲了啊,以后呢,涉及到分支呢,通常咱们习惯上呢,一开始想到的都是if。啊,因为if比较通用啊,嗯,你看if讲咱们也没说过它限制什么类型什么的都没有是吧,它是更通用的啊,那这道题也一样,你也可以考虑说这个要用if写怎么写,那咱们也可以先试着看看啊,然后再改成用Switch case首先从键盘获取,第二,哎,Scanner这个咱们今天写了不少这个操作了,诶应该呢,大家熟悉比较熟悉了,C这么点印好,接着呢,我们有一个优化的提示,呃,这呢,我们说请输入,呃,这个2019年的这个月份改开了月份,呃这块呢,你就写一下啊,肯定是应该用next呗。
03:45
拿一个特型的一个mass呢去接收,OK,接着呢,再输入一下这个day 2019年的这个月份的这个日期是吧,2019年的这个,诶这样说吧,请说2019年的这个month,请说2019年的day这样。
04:08
嗯,这块呢,咱们还是先不去进行一个是否这个合法的一个验证了啊,这要验证呢,又比较复杂了,比如说呢,用户这块写的是二月,他这边写了个31,呃,咱就先不让他就报错了啊,就是咱就先按照这个用户写的都是合法的来了啊嗯,有了month了,有了day了,我们现在主要的矛盾呢,集中在要求这个总天数,其实是啊对,那咱们是不是得先定义一个变量啊,来这个保存啊,咱们的这个第多少天相当于是这个总钱数啊,In型的some days这样啊,一开始是零。呃,然后呢,下面咱们来写这个衣服这些结构啊呃,衣服这些结构,哎,很显然呢,这个,哎,我们这个衣服里边呢,写什么呀。
05:01
是不是应该写你这个month啊,哎,当你要是一月的话,Some days是不是就直接是day啊,一月的直接就是day呗,对,然后2IF month等等于二月怎么着,是不是一月的31天加上加上对呗。选不中了,哎,加上这个,然后接着哎,Month等等于三月,哎,Some days等于一月的加上二月的,加上三月的这个,诶其实这边写着写着你发现这个事好像越写越多啊。
06:00
感觉越写呢,就觉得越越越繁琐,呃,因为到四月这块呢,你需要把前面这几个月都得考虑进去,三十一二十三月的再加四月这一这想下就是你要写到最后这个这块就是12月了,是吧。哎,这个相当于我们这个哎month,哎等当于这个12的这个情况啊,那你要这样的话呢,你这个some days这里边是不是就得把这些一到十月的全写出来,再加上个day啊,嗯,这样写的话呢,其实有点繁琐了。啊,或者不能准确说不能叫繁琐了,应该说叫有点冗余啊,哎,这个词呢,我们第一次听说啊,怎么叫冗余啊,多数多余,对这个余呢,你可以理解为就是多余了,你比如说你像咱们写这代码里边,你看第一行,这就这就这一个数,这是两个数,这是仨数,这四个数,你会发现呢,你写出来就有点像这个三角形一样,越到后边呢,这个sum,这个式子越长越长嘛,倒无所谓,关键呢,就是你下边写的这个式子,你发现上面都写过,像这个是吧,这里边呢,这个跟这个这不是上面已经写过了,但是你又写了一遍,然后这个式子呢,你在下边这块又都写了一遍。
07:29
哎,就有好多重复的,重复的没有必要写的,我们就理解为是冗余。啊,那下边我们就得考虑说,倒不是说这样做不行啊,可以,反正写起来就很崩溃了,那我们就把这种情况呢先注释一下是吧,不这样写了,这种方式呢,一般啊,这当然也算是一种方式啊,方式一啊,有点冗誉啊,那我们下面来考虑使用一下这个Switch case啊,Switch case能好到哪去呢?先写写看看啊,Switch很自然的,你把这个math呢,是要放在这儿的。
08:11
哎,然后接着呢,你去匹配一下它到底是几月的,如果是一月的,一月的好像是不是也得这么着写,我把这个定义到外面。你要是一月的话呢,是不是还是这样,而且你不光写了他,你这还得加个break呢,二月的似乎没有什么变化。哎,大家跟着我这个思路啊,这就是咱们解决问题,你你开始会去怎么去想这个问题,三月的话呢,哎,你也是这样去写三写着写着你发现这个事也不太多,对跟呢没有么来,然后等等我就不往下再写了啊,越血越长,跟上面一样。
09:12
嗯,其实很多时候呢,大家你会发现这个人类社会呢,这个之所以会进步哈,有时候就追归结为一个点,就是人呢都比较懒是吧,对,比较懒,嗯,因为呢,你不爱老是做一些重复性的东西,或者说呢,就是很耗时的东西,所以你会想着说,哎,我能不能偷偷懒啊,这时候你脑子就开始动起来了,然后就开始诶想办法怎么能偷懒,然后诶发现这个这个比原来确实更好了,更高效了,这个社会呢反而就进步了,嗯,就原来你比如从这个地方到这个地方呢,走路发现哇,好慢呀,后来人觉得诶还可以跑是吧,越跑越快,越跑越快,然后后来发现越跑的有极限哈,同时的话呢,还挺累啊,那怎么办呢,骑个马吧,嗯,31号份,嗯,对,那个咱不是现在正聊天嘛,行,对等是咱们回归到这哈,哎,你就骑上马了,骑上马了后发现这个马你还得喂,还挺麻烦。
10:13
后来这不就发现这个机动车呀,这个人就出来了是吧,对,烧油的就出来了,就啊就是等等吧,类似的很多事其实都是这样子的,嗯,对,然后呢,我们这个越写越越麻烦,就想着这个事不太靠谱,看看能不能这个简单一点,所以这个呢,跟咱们方式一其实没有太大区别哈,好,下边我们想怎么能尽可能的让它减少冗余。就是你这里边它上面已经定义过这个东西,最好下面就不要再重新写了,这多麻烦呀。怎么写啊?哎,这个呢,就是有点难度了啊对有同学有同学提到说我倒着写。啊,你看咱们上面写的这些下边都会用,上面写的这些下边都会用,这个写的呢,下边又会用,那我们刚才那会讲这个Switch case的时候呢,这写这个case后边呢,也有这个其他case,咱当时那个说过一个情况就是没有加break的话呢,如果你一旦找到一个进口进去了,它会默认的时候把下边这些都执行了,那就其实意味着下边这个case容易被执行的概率其实是不是要高很多,除了它本身匹配之外呢,上面这匹配的也可能会执行它。
11:32
哎,就是这块呢,实际上是被调用的频率很高,那不就类似于咱们一开始写的上面这个吗?这个呢下边都会用,所以呢,我们倒着写。哎,倒着写哈,就我这呢,先写K12,哎,然后呢K11,哎K10对一直呢我们写到这个K1,哎这样来处理啊,那首先呢,我们从后往前看啊,当这个K是一呢,就是它是一月份了啊,那肯定还是some days呢,我们这写成个day,嗯,对,这就完事啊,然后呢,如果是CASE2是二月份的怎么写啊看看哎你这个some day,按说呢,这个就是呃先一月份的是31天,再加上这个day就行,但是我们不想写break,不想写break了哈,我就直接让他走到下边,你要走到下边呢,这块不能是让他在负值位这个这个sum data,而是是不是要加等于了。
12:41
看看对吧,如果我们是二月2月5号吧,你是先把一月份的这个加到它上面,因为一开始它是零嘛。这不定义个零嘛,哎,先让这个31天加到这个里边,然后呢,你再把一月份的,呃,一月份的已经加上了啊,再把你这个当月的这二月份的这个date累加到已有的这个someda里面,所以这是个加等。
13:06
啊,那对应的你这个CASE3呢,CASE3我们这个some days,他就应该是先拿二月份的是吧,28天加进去,加进去以后呢,自动的让他走到下边,你应该是再把一月份的加进去,所以这个位置都应该是加等于了,那类似的,其实这些都应该有加等于啊,那对应的二这块呢,这就是一月份的天数,三这块呢,这就是二月份的天数,哎,以此类推,哎,可四写个四,哎,加等于,这写三月份的31天,再加等于四月份的30天,哎,加等于五月份的,咱们那个口诀叫一三五七八十腊是吧,135,这就是31天。
14:06
七。这是六月的,六月38,这是个,这是一三五七七三一七八十还是三十一八,然后十月份的。嗯,十月十月这块呢,你应该是加九月份的啊。30。哎,等于嗯80了十,这还是三十一百。30吧,十月份的。
15:01
哎,这就写完了,哎,这个呢,是咱们完整写出来啊,上面没有,上面那个你写完以后呢,肯定比这个写的要夸张很多了哈,嗯,这个式子写完以后,大家看看能不能看得懂啊。呃,比如说咱们现在呢,是考虑7月8号吧,呃是这一年的第多少天,你这个month呢,就是七,直接呢我们就奔到这块来了,诶some呢,一开始只是零,哎这块加的这个是六月的吧,诶我们把六月的加进来了,然后呢,没有break,直接又蹦到这块,这呢是五月的啊再往下四月的,三月的,二月的一月的,呃,这是这个二月的一月的这个在下边了啊是把一月的也加上了,哎把这这个7月8号啊,把这六个月都加完以后,最后一个把你当月的这个day加上那就可以了,就是我们这呢,就用不着每一个里边,就像刚才那样,都把之前的这都写过了,直接我们这块就可以这样去实现啊行,来咱们测试一下啊,测试诶还还没有输出呢,哎,当你计算完以后呢,我们下边写一个S。
16:12
哎,说这个,嗯,这个吧,2019年,哎,2019年加上。月day日,哎,是当年的哎D哎,上this天哎,是不是这样就完事啊?来测试扎va c Switch case test2点Java。诶编译过了,然后接着好,请输入2019年的,慢咱们先举一个这个数别太大了啊,四月份四月的三号,4月3号,咱们先手工算一下啊,4月3号一月的31,二月28,三月31 4月3号算是多少钱,59,八十九十九十三吧,对93啊,然后回车一下。
17:29
哎,这不就93点了,行,嗯,这道例题呢,嗯,就是一方面啊,它是一个算法性的题了,主要呢,其实通过这个题目咱们想说明一点,就是咱们写这个Switch case哈,呃,为什么人家这个Switch case当初定义的时候没有说这BREAK1定要用,实际上呢,有的时候是可以不用的,哎,咱们这块呢,这不就是一个例子嘛,哎,我们没有加break呢,这个题其实写的会更舒服一些啊,就是这个break呢,不是说在Switch k当中是必须的,它也是一个可选的啊,在这呢,我们写一下啊,这是一个说明啊,这个break在在Switch case当中。
18:14
嗯,是可选的啊啊,只是说呢,从咱们这个实际开发中去讲的话呢,绝大部分啊,95%以上的情况,咱们用到Switch case的时候呢,都会加上break,通常都会加,而且呢,经常有同学呢,都忘了加了,该加的时候呢,忘了加了,然后经常会发现,诶怎么就把后边的也给执行了,因为你忘了加break了。诶,你通常你得记着加补这课啊,因为你不加的话呢,编译他也不给你报错,因为人家是可选的,没有说一定要加,所以不报错,诶你写的时候呢,要小心一点,这呢就是让大家体会不佳的一个例子而已啊行,那这个完了以后呢,大家看一下咱们这个PPT哈,PPT后边你看这我这有一个练习,相当于是一个拓展题了,这个拓展题呢是说,诶我呢不光是月日了,我这个年也考虑在内,来问问是这一年的第几天,诶大家想一想这个题啊,跟刚才这个题呢,其实有很大的相似度了啊,只需要变一变就可以做了,诶应该怎么做,可以想一想。
我来说两句