00:00
好,我们开始今天我们这几道问题啊,昨天的话呢,咱们把流程控制的内容呢,就都讲完了,呃,所以这五道问题呢,主要呢,也是涉及到咱们流程控制的,呃,相关题目。那咱们就一个一个题来看,首先第一道题说循环结构呢,是如何最后退出循环的啊,有哪些不同的情况。这个咱们昨天呢,其实也都提到了啊。几种情况呀?应该是两种对吧,在这呢,我们就写一下了啊,我就不找同学来说了,首先第一种。哎,咱们讲循环结构的时候呢,提到说循环呢,一共有四个要素,这四个要素里边,我们主要关心的第二个要素叫做循环条件。而且这个循环条件呢,就他自己啊,有一个特别严格的要求,就是他呢,一定是一个布尔类型的,诶其他几个条件呢,没有这样的要求,那通常呢,咱们这个循环退出呢,都是呃判断的这个叫循环条件,那也就是说呢,我们的循环条件。返回false。
01:01
哎,那这个时候的话呢,我们就跳出了当前这个循环结构啊,是这个情况啊,那比如说咱们以下边这个为例吧,这呢就是咱们所谓的叫循环条件了,哎,初始化部分循环条件,循环体和我们的迭代部分,那一般的情况下呢,我们这个循环就这样走走走啊突然呢,有一次这个循环条件不满足了啊,就跳出了这是一般一个情况,那除此之外呢,我们说还有这个第二种情况。哎,第二种情况呢,就是我们说在循环体内。哎,在循环体内呢,我们说一旦。执行到。这个break关键字啊,它呢也是可以叫跳出循环的。跳出循环。咱们这个题目呢,主要说的是跳出或者叫退出循环,所以呢,这个这个肯定有关键字呢,我们就不写了啊,它就不算了。那这个break的话呢,是这种情况,咱们呢,有可能不是通过这个循环条件呢,去结束这个循环,也就是说我们这块呢,程序呢,在这块不断的去执行的过程当中,呃,由于我们这个迭代条件呢,不断的在变化,那突然呢,变到某个情况的时候呢,咱们通常在这个循环体当中呢,都会有一个依附语句了。
02:10
当你这个循环迭代条件呢变化了,我们这里边儿呢,突然这里边if呢,就满足了啊一旦满足我就进去呢,执行了一个break,相当于咱们这个跳出这个循环呢,就要跳出了。这就咱们说这个break的这个情况啊,好这呢,就我们说的这样两个点,注意的就是不能够去写这个叫continue了,Continue呢,咱们说的是跳出当次循环啊,所以呢,肯定就就不算了,包括呢,咱们这个最后讲课的时候呢,没有提啊,就是没有讲啊,但稍微提了一下,就是关于这个return。这个return的话呢,我们说不能算叫它结束循环的,它呢主要是来结束一个方法的啊,只不过呢,我们把这个流程控制都会写在方法当中,你把结方法结束的时候呢,顺便呢,把这个循环呢就也结束了,但是不能算作它专门来结束一个循环的啊,这个大家要注意这两个呢,咱们就不要写了。
03:02
行,这呢是第一道问题,第二道问题说指出如下,程序输出的结果是什么?哎,这个呢,其实就咱们的一个上课咱们讲的一道题目哈。嗯,这呢,我用的呢叫continue加一个标签的方式。哎,肯加标签了,这个说实话啊,咱们实际开发当中呢,这种情况呢,写的比较少。写的比较少啊,但是呢,这个也需要大家知道该怎么去用啊,一旦呢,你写到这个程序需要用了啊,你不能说从知识上呢,有这个欠缺啊。行,我刚才呢,下去走了走,看了看啊,这个大部分同学呢,写的都是对的,但是也有个别一些同学呢,写的就有点过分了啊,你看这个程序呢,这个运行的结果正常应该是什么啊,那么正确结果。正确结果,大家都是得出什么结果呀?哎,这个我们结果呢,应该叫1231231231234组123这呢是咱们正确的情况。
04:01
这个咱们昨天其实已经运行过了啊。呃,当然了,大家没有背过这个答案是对的,没有必要背这个结果了啊,就是你还是得去能够去分析一下,就是我们一旦执行到这个肯定就加标签的时候,呃,默认情况下呢,我们肯定就说是结束,包括他最近的呃,这一次循环的档次。啊,就结束的是档次啊,但是我们加上一个标签以后呢,它就是呃,指定的这一层循环的档次了。所以说呢,当我们一开始就是你这个if呢,123的时候进不去,所以这个123输出了,输出完以后的话呢,一旦你执行到四的时候呢,我直接就肯定就下一次了,所以下边呢,像这个输出啊,这个换行呀,就都没有时没有机会去执行了。所以呢,我们直接呢就奔到呃爱加加,爱加加呢,你这个就爱加完E以后呢,又进来又进来又是一个123,所以呢,我们这呢,一共有四组123。哎,速度123,我看有的同学呢,还写的这个结果呢,是啊123567啊90,然后呢,写了四行。
05:01
你要是写的是这个结果的话呢,你肯定是没有考虑这个标签啊,你看我这写的很清楚,标签呢是声明在这儿的,你要没有加标签啊,你的那个结果呢是对的。这是咱们说的这个第二道题哈,然后呢,第三道题,这个题呢是一个编程题,这个题呢,我们给它CTRLC粘过来,咱们写一写啊,这呢我去新建一个T文件。哎,我这叫D05.tst。好,咱们在这呢,来写一下啊。CTRLV一下好。拿过来。好,来看一下这道题目怎么做啊?说呢,一个数如果恰好等于它的因子之和,呃,那这个数呢,我们就称为叫完数,那例如呢,说六等于123,那编程呢,要求我们找出1000以内所有的完数。哎,这道题呢,跟咱们昨天写的这个,呃,多少银的这个速数或者叫质数的输出呢相比,这个题还是要简单很多的。
06:03
啊,大家如果做出来的话,你比对一下啊,你发现确实是要简单一些。那这里边提到一个叫做因子啊,因子的话呢,说除去这个数本身的其他约束,那你像这个六呢,正常来讲它的约束呢,有1236,那这里边这个六呢,就不用考虑了啊,就是把其他的这个呃,因子或者叫约数呢,给它加一起,等于这个数本身啊就可以了。首先我们去剖析哈,说呢,让你找出1000以内所有的完数,那我们就直接呢,先写个循环去遍历一下咱们1000以内的自然数啊,I等于。这位是写一还是写二呢?咱们昨天讲这个质数的时候呢,输出的是二,写的是二是吧,这个你写一也无所谓啊,写一也可以,然后呢,I小于等于1000,然后I呢加加先呢,便利1000以内的所有的自然数。好,接着。接着的话呢,我们就需要呢,看看哪些数是我们这个I的因子。啊,那这个因子的话呢,你看它也是从一开始,所以自然而然的,我们这个接呢,也得从一开始,然后接,注意这个时候我们应该小于或者小于等于多少比较合适。
07:10
啊,小于等于多少比较合适,哎,有的同学呢,写的是I,写I呢是可以的啊这个我们。这个J加加一下好过来。哎,相当于呢,就是我们从一开始一直到呢I减一,看看这个哪些数是我们I的一个因子。然后把这个因子呢,咱们得给它累加起来哈,那判断是因子的话呢,那就是I呢,去取模阶呢,等等于零了,那说明我们这个就是I的因子。啊,那说因子的,咱们得做一个累加这个,累加这个事呢,经验其实咱们都有了啊,咱们之前讲100以内的偶数奇数啊,咱们求他们这些数的和的时候呢,都是做过累加操作的。行,这个呢不陌生,那咱们定义一下啊,比如说我写到。这儿呢?定义一个in的型的,不妨我就叫做一个factor。
08:02
哎,等于先负个值是零啊,当我们除尽的时候呢,我这个factor呢,就做一个修改。哎,咱们呢,就加等于咱们这个接,哎,把我们这个阶值呢,累加到这个factor上面。行,那么通过这样的一个内存循环呢,不断的去走,直到I减一结束,我们呢,就把所有的这个I的因子就取到了,取到以后出了循环,我们判断一下,如果此时的I呢,等等于咱们的factor。哎,真的基本上这个题呢,这不就搞定了啊。那那你要等等的话,那就相当于满足我们这个条件了,那这时候呢,他就是我们要找的这个完数。这个时候呢,我们去输出一下这个I就可以了。嗯,这个I搞定以后呢,我们接着再看下一个I就行,行这个程序呢,写到这样有没有问题。有问题吧?哎,有的啊,这个呢,跟咱们昨天讲的这个质数输出一样,这个factor大家呢,如果你要真正去运行这个程序,你发现诶出来几个数就再出不来了啊原因是什么呢?我们这个factor呢,你不断的往上累,呃按正常来讲,你下一个I的时候呢,得重置一下啊,现在咱们没有重置的这个操作,所以我需要在这写一个叫重置。
09:20
哎,重置咱们的这个叫factor。所以呢,我们在这呢,需要让这个factor呢,再复制为一个零。这样就可以了。那这样的话呢,我们这个程序呢,就完成了。哎,就完成了啊,那如果有的同学呢,你把这个factor ctrl X定义到这了啊,CTRLV一下这个呢,就注释了。如果你要是定义到这的话呢,相当于每次你挨进来的时候呢,都重新定义了一个factor,这就没有必要再去重置了。哎,跟咱们昨天的这个波尔型的一个flag是完全一样的,行这呢就是这么个情况,不多说。行了这个程序就对了啊,对了以后呢,我们想想稍微能不能再优化一点点啊。
10:02
稍微的优化一点点。嗯,那大家你看这个位置吧。现在的话呢,咱们这个数呢,是让它去计算到I减一。那其实我说呀,没有必要到A减一了,我们实际上是可以让它到。哎,注意啊,开根号行不行啊。咱们昨天讲这个质数的时候呢,是用的这个麦点开方哈,哎哎,这个时候呢,注意这可不行了。咱们昨天呢,是只是判断他能不能被这个其他的自然数除尽,咱们现在呢不一样,咱要找到所有的约束,所以你不能是到这个截止了啊。哎,咱们其实这块呢,可以给它改成叫二分之I,但是你要小心一点,这个等号呢,要补充上。啊,比如说呢,咱们这个数是十,那你除了找一二啊,然后三四不靠谱,这个五的时候呢,也得要啊五呢,就是相当于它这个除二得到这个五,这得要啊,这个五以后的话呢,这些数呢,其实就不靠谱了啊六到九,你像我这个除二的时候呢,得到是五,那六到九呢,意味着你对应的这个数呢,一定是一到二之间的,它永远不可能被除尽。
11:04
所以我们这个位置呢,到二分之A加个等号就可以了。这个题的话呢,大家看写的不好的话呢,再做一做啊,这个稍微呃,也有点难度,但是跟我们这个素数比呢,要稍微还差点意思啊。下边呢,第四道题。哎,第四道题说。Break肯定在使用上的相同点和不同点有哪些,这个咱们一会复习的时候呢,也会说到啊,嗯,那咱们就直接在这呢,在稍微的带大家去温习一下,这个break的话呢,咱们是可以使用在这个Switch case啊,以及咱们的循环结构中。啊,这要注意啊,然后咱们这个continue呢,它是只能够用在循环结构中。哎,只能用在这个循环结构中啊。那么这是他们也算是一个使用上的一个点啊,你要说不同也行啊,不同的话呢,就是说他还用在Switch case,你要说相同呢,就是他俩都能用在循环结中啊,这都行啊。
12:00
那么我们现在要关心的是?Break或者肯定就在循环结构中用的话呢,它表示的意思有什么不同,哎,这呢,咱们提到了,说这个循环结构中用break的话呢,叫结束。当前循环。啊,而我们这个肯定用的叫结束当次循环。哎,一个字的差别,这个呢就差很多了,哎,不多说啊,昨天都讲过了,那另外的话呢,我们又提到他们二者的一个相同点,这个大家呢也去关注一下,就是说我们break肯定啊,一旦执行到以后呢,要么就结束循环,要么就是开始下一次了,所以我们在他们的后面呢,是不可以写执行语句的啊,说其后后不可以声明。啊,执行语句。哎,这个大家一定要小心一点啊,CTRLCCTRLV啊。这呢也算是一个相同点,好,这个呢不多说了,就啊这个大家用的时候呢,正常会使用就可以了。嗯,至于说后边我们说带标签的普利和肯定呢,开发中心的比较少,那当然这个点呢,大家也知道啊,默认的时候呢,我们接触的是包括他最近的这一层,呃,循环接触档次或者当前的。
13:07
啊,这个你要想结束指定的某一层啊,或者说某一层的某一次的话呢,这就用带标签的break和continue就OK。那么下边呢,最后一道题,把这个题呢,我们CTRLC一下啊。这是咱们这个第五道问题。这个题呢,也是咱们的一个课后题了。啊,一个课后题了。嗯,咱们在开发当中呢,咱们写这个for循环一层的情况其实是最多的。大概能达到70%~80%这样的一个频率,那么写两层for循环呢,基本上就能够占到剩下的这个频率了。那写三层的这种情况呢,基本上不会出现,或者说极少出现啊。极少出现,嗯,但是呢,真正你要是写一个程序,大家发现写两层搞不定,又需要写一层的时候,往往这个时候呢,你重新再再想一想啊,这个复杂度呢,可能会有点高。
14:01
哎,可能会有点高啊行,这呢是我们说的这个,呃,这个情况哈,到后续呢,咱们做到相关的一些题目的时候呢,咱们再给大家去练一练,讲一讲啊。那在这个嵌套for循环当中,咱们这道问题呢,其实又作为一道比较基本的问题了啊,其实要求大家呢,这道题都要会写啊,拿起来就能写,应该是这样子的啊。好,记住一个技巧,就咱们说的叫外层循环控制行数,内层循环控制列数。那一层。呃,循环控制这个列数啊,记住这个事儿,这个题呢就很好做了,首先呢,我们写for循环特I等于一个一,然后I呢小于等于。我们这有六行啊,那我就小等于六了。哎,从一到六啊,然后I加加。那接着。接着的话呢,我们写这个,呃,里边这个for。哎,这是呢来控制的这个列数角啊,这个for的话呢,Int一个接等于,哎,我们也先从一开始啊,这个接的话呢,我们来控制的就是内层里边的每一行啊,每一行呢有几个列啊,像第一行有六个列,那从一开始的话,那就小点六倍。
15:15
啊,那第二行的话呢,你就变成五个了啊,12345,那这个呢就得变成五了啊老是变是吧,但是发现有一个不变的,就是I根加的I根接的这个和是不变的啊,I是一接是六。啊,I是二,这是五,所以它们和不变,所以这呢就是七减去I啊,然后呢接加加。诶这样子啊嗯,这个呢,细节你可以体会一下啊,当X1的时候呢,七减一就变成六了啊,接小等于六,从一到小减于六正好六个,然后呢,随着I的增加,接呢都会减少一个啊这种情况这呢我们做一个输出。哎,注意这时候我们换行就不要了啊,输出一下我们这里边儿这个星。
16:01
这个星呢,用双引号单引号啊都可以,咱们也说过这个事了,哎,为了这个好一点的话呢,咱们可以给他补一个空格也行,这样呢就稍微有点间隙了啊,如果你要不要的话呢,那就直接一个星就完事。那么当我们内层for循环结束以后,相当于当前这一层呢就完事,咱们下面呢,加一个换行。哎,加上换行就可以了。行,这呢,就是咱们写的这样一个程序哈,这个不会的话呢,大家呢,要再多去写一写。啊,就这样。嗯,那多说一句哈,呃,有没有同学呢,写我们这个I或者是接的时候呢,初始化值呢,是从零开始的呀。有吧?有可能会有啊,尤其是呢,是这个大家做过这个数组问题或者说字符串问题的以后啊,你遍历有同学提前预习过啊,诶我们呢,都习惯从零开始,就是因为它的索引呢是从零起的,今天咱们讲数组的时候呢,也会提到这样一个情况啊。那如果你这个位置要是写的零,后边这块呢,就会有调整了。
17:03
哎,你想你是从零开始的,我是从一开始的一到六,那你这个从零的话呢,那就是六这块就不要加等号了。相当于我们是从零一直到五啊,那零到五不就正好也是六种情况吗?哎,这个I加加。哎,这么着啊,你要这样里边呢,我们看看啊,怎么写内层的for。内层的放呢,我们如果接也是从零开始的,那这时候呢,看看这个接怎么写。这时候接怎么写,那你看哈,我们I是零,I是零的话呢,皆是有六个。啊,然后I是一呢,皆有五个,相当于它们的和呢是六啊和是六呢,你可能就会想,那我这就写一个六减去I,看看这个时候靠不靠谱啊,这个让接呢也去加加。这样子看看啊,就是大家写完以后呢,你自己稍微体会一下,比如说我们这个I是零,我这个J是零,然后这是零六减零六减零是六,J小于六,那就到五,从零到五,诶六个。
18:03
对的啊,当我们这个I呢是一,I是一,然后接从零开始,这是一,六减一是五,然后呢接小于五,相当于最大到四,就从01234正好五个A对着的是吧。哎,所以大家呢,可以细节的去体会一下啊,小心一点就行,那下边呢,跟我们这个上面写的这个程序呢,那就完全一样了,粘过来就OK。啊,这是我们这样的一个程序这样去写哈,当然了,我们也没有严格要求,说不是零就得是一,你也可以从十开始。只不过你这样写实,你后边这个呢,你得处理好啊。那写起来可能就有点儿费劲了。好,这呢是咱们说的这今天考试的这五道问题啊,这五道问题大家看一看,哪个题呢,写的还不是特别理想的,下来再做一做啊。
我来说两句