00:00
诶,那么这个完了以后呢,接着我们再看一下,这个叫3.6,诶这个呢叫嵌套循环,诶或者叫多重循环,前面呢,咱们讲这个e false的时候呢,其实也提到过类似这个问题。那在这儿你看出现一个叫E的一个嵌套,只不过呢,当时我们讲这个嵌套话呢,其实。就直接呢往下就写了啊,相当于呢,我们这个程序呢,从上往下执行执行执行,然后这块呢,需要分支了啊,那我们这块就分支了,假着呢就分了两支,分了两支以后呢,其中的一支呢,再往下走走走走发现又不确定了,这块呢我们就又写了个分支。那整体来看的话呢,相当于是你在上边这个if else里边又套了个if else。哎,就是我们下边这样的这种情况,这呢就称为呢叫嵌套。啊,就比如说你里边穿了一件衣服,外边又穿了一件衣服,这不叫外套。啊哎,其实就是一个嵌套结构,那对于循环这块呢来讲,其实也是同样的道理。啊,同样道理啊,如果呢,我们刻画一个结构呢,它是一个循环的,那就是写一个循环就行了,但如果你发现这个结构的话呢,它这个结构又不停的在循环,那我就没有必要呢写多个了,那你这块你把它呢再。
01:05
哎,套到另外一个循环里边就行了。比如说啊,哎,我稍微就在这说一下,比如现在我们想便利一到100的这个自然数。那我们写一个循环就行,那如果说我让你,诶打印三遍哈。一到100这一个自然数。或者我让打印五遍十遍一到100自然数,这个时候呢,你整个这个一到100这个自然数的一个输出,使用的是一个循环,然后整个这个结构呢,又执行了三遍,我就考虑呢,把它是不是放在另外的一个。呃,循环当中去体现啊。哎,那么这样里边呢是一层,比如说for来写的,外边又是一层for,那就构成了这个叫嵌套循环了。实际上的话呢,这块没有什么新的知识点,只不过呢,就是呃,大家呢,在处理这种循环里边套循环的时候呢,可能会有点儿懵。哎,所以这块呢,我们把这个专门啊嵌套循环呢,拿出来给大家呢,稍微的讲一讲,包括呢,里边有几道题咱们做一做啊,大家感受感受啊,以后呢,我们写循环结构的时候呢,是可能出现嵌套循环的。
02:06
哎,OK。好,那这块呢,我们就回过来啊,去新建一个Java文件了,哎,这个因为是循环了啊,我们不一定是for里边套for了,任何一个循环结构都可能会作为外层的或者内层的,当然这块我总得写一个吧,我就写成for for了啊。哎,这样CTRLCLS。保存一下。哎,这么着啊。哎,这个咱们是叫哎嵌套来循环的一个,哎使用。呃,首先啊,稍微明确,诶,怎么叫嵌套循环。对,你看这块儿写了啊,其实就是咱们刚才说的这个事儿,它呢是指一个循环结构A的循环体是另一个循环结构B。啊说比如说呢,For循环里边又套了一个for循环,哎,就构成了叫嵌套循环。嗯,其实这个事儿呢,也相对比较简单一些啊,那么这里边儿这个循环结构A和循环结构B呢,我们可能是任何一个前面讲过的这个循环结构。
03:08
两两组合,怎么都行。啊怎么都行,OK好,然后下一个问题的话呢,就是既然呢,出现了一个嵌套,哎,我们为了方便的去刻画,诶这个里边这个A和B这两个结构,咱们就相当于又给咱们起了个名。哎,是A里边套了个B。啊,相当于是这个样子啊,哎,这是A里边呢套了一个B,那很自然而然的A呢,就称为叫外层循环了。啊B呢,就叫做内存循环。这叫外溢,这个叫内衣是吧。哎,这个内外的这个关系啊好,那你说我这A外边是不是还可能再套一层。我再套个C了是吧,是不是就三层。欠套了。哎,那么这时候这个内外啊,注意它是一个相对概念啊。A呢,相较于B,叫外层。相较于C的话呢。又成了内层了。对,所以说这是相对的一个概念,行,这呢是这个基本的概念啊,比较好理解,咱就过了好,那么下边的话呢,咱们来给大家举个例子,哎,感受一下我们使用这个循环里边套循环。
04:09
行,那比如说呢,现在我们希望呢,诶让大家呢,在这个控制台上呢,去打印六个星。哎,打印这个结构。这个结构呢,你可能会想到说,那我就直接写一个输入语句里边就六个星就完了。啊,那如果是60个星呢。啊,那这时候我们就还是用个循环写好一点是吧。行,那这个呢,我就写个for循环吧,因为它有明确的个数,那我就用for了啊,如果没有明确个数呢,建议你用well。I等于零啊等于一吧。I呢小于等于六。爱呢,佳佳。嗯,在这里边输出一下。哎,这个呢,咱就不要换行了啊,直接呢把它输入到一行上,嗯,这个位置你说我写一个单引号,里边写个星还是写个双引号有区别不。
05:00
嗯,这个,呃,这个区别呢,仅限于打印的效果一样吗?嗯,啊,叫我呀。效果一样。We are。测试一下就知道了是吧。哎,点Java。你看这六个星啊,你赶上双引号肯定也是。对,是效果上是一样的。这个要细究的话呢,我们后边会讲方法啊,实际上呢,调的是不同的这个。呃,结构了啊,这个这个就不说那么多了啊,就是效果上一样啊,方法的事以后再说。好,那完事了啊,哎,那现在的话呢,这我们是使用的是一层方循环就能搞定的这样的一个效果,哎,就完事了,哎这个不妨呢,我写一个输出的语句分隔一下。嗯,在这我们整一堆,哎呀,这已经用了,行了,不用用这个吧。把它这个叉开啊,嗯,在前面这我们再来一个这个。这样的一个杠,嗯,啊这个呢,效果呢是这个样子的。
06:03
编译运行,哎,对吧,哎是这样子的啊,哎,这个位置呢,因为它没有换行,所以我这儿呢,有个杠N是不是让他就换行了嘛。诶,然后再把这个打印完以后呢,他自己又有个换行跑到这儿来了啊行,那么这呢是其中的一个需求,现在的话呢,我这个需求呢,变得复杂了,我希望呢,有这样的一个需求。嗯,在这啊,诶刚才呢,你不是打印了六个星吗?我现在呢,希望你打印这个五行。六个星12345。五行六个星,那这个事儿怎么搞定?对诶,那你整体来看的话,你发现了这个效果呢,是不是不断的重复的执行。哎,那么一共执行了五次是吧。哎,那我们其实就考虑呢,让这个结构呢,是不是重复执行五次。这个重复之音五次呢,你要说我就这样了啊,12345。
07:02
可以是吧,但可以说你稍微注意点,这个你记得换一下行哈。对,要不都打到一行上去了。哎,把它那CTRLC这个得得得这么着了啊。但这个呢,你想代码这样写的话呢,是不是就挺low的。整这么多相同的,或者你猛一看,这个可读性还挺差的啊。所以这时候我们就不能这么着去处理了,既然呢,你这时候呢,这一段代码是重复的去执行,那我们都讲了循环了,干嘛不用循环呢,所以把这个就删掉了,针对于这个结构,让它呢执行五遍。它就是一个循环体。哎,那我在它外边呢,就开始去套了。给我写个for。哎,那注意这时候还能叫I吗?对,这时候就不能了啊,因为你看啊,我是在这个for里边,是不是套这个是吧。哎,站到这儿了啊。那么这时候呢,你这个I呢,它的作用率呢,是这对大括号。
08:01
里边呢,你又来一个I,那你说我这块要写个I,是外边的I还是里边I,不就乱套了吗。编译器就确定不了了,所以这时候呢,不要定义同名的了啊叫接啊。接着从一开始,五四。小于五就行,哎接呢加加一下。诶,那这个呢,相当于我们来控制的,就是你整个打几轮是吧,一共打五轮,所以这就是五,然后呢,在具体的这每一轮的这个层面呢,一共是有六个,诶这块呢是有六个。诶,每打印完六个以后呢,我们换下行,诶比如第一行打印完以后呢,光标又跑到这儿来,然后呢,接着再执行那边里边的这再来六个,六个完以后呢,又换行,又跑到这来了,然后G加加再来。哎,就成了。好保存一下。编译运行,诶这呢,我们效果呢就出来了。啊,就是这样子的行,那么这个呢,就相当于是我们写的一个比较简单的一个啊,或者叫比较形象的一个嵌套for循环的一个效果。
09:01
哎,这个大家呢,去体会一下。来体会一下啊,整个这个呢,哎,充当了外层循环的循环体。在这呢,我们写一下这样一句话啊,相当于是个说明。哎,说明这里边儿,我们第一点啊,说那叫内层循环。啊内层循环,然后呢,就哎充当了啊外层哎循环的。来循环体。就是这样一个效果。好,那么这个效果完了以后呢,我们可以呢,再稍微的去体会一下这里边的一些细节啊,比如像刚才这个效果,我们看到呢来说呢,有五行,诶每一行的话呢,有六个星,你也可以呢,理解成是六列哈。哎,那么这时候呢,我们去体会一下,哎,我们再去处理这个效果的时候呢,这个五和六,哎,恰好跟这里边儿这个行数和列数呢是对应的。
10:00
五呢是外层循环对应的是。行数吧。对,然后在具体这一行当中呢。哎,到底有几个星呢?是不是取决于内层循环的循环次数了?好,那么如果说我们把这个嵌套for循环看成是一个这种平面的这种图形的话。这不就有行有列吗?我说呀,哎,外层循环控制行数。然后内层循环呢,就是你这一行在接一的时候呢,就这一行了,这一行当中有几个呀,哎,我就看内层有几个列了。哎,一共是六个嘛,所以呢就是六列。所以能不能理解成叫哎嵌套,这是相当于两层嵌套for循环当中啊,这个外层循环控制行数,内层循环控制列数,能理解吧。哎,那么以后大家在处理类似问题的时候呢?这算是一个小的技巧。你可以这样呢去理解。
11:00
这是第二个啊。嗯,说对于啊,两层。哎,嵌套循环来说。哎,来说啊,我们可以理解成呢,叫外层循环控制行数,内层循环控制这个N列数。啊是这样的点,好,那有了这个点以后呢,哎,紧跟着你看我再来个三哈,那这块我说呢,比如说这个哎外层。啊,这个呢,相当于是一个。举例吧。啊举例什么呢?就是外层循环这个呢,嗯,循环。或者叫执行吧,M4。这个内层循环。来执行N次。哎,这个N呢,就你可以列成这个呢,就是M行,这个就是N列的意思哈,哎,那么我们核心的这个呢,比如说这一个语句。他一共执行了多少次呢?哎,是不是M乘以N呢。哎,这不一共是30个星吗。OK啊,诶内层循环执行N次,则诶内层。
12:04
哎,循环的循环体啊,共执行。来执行,对M呢,乘N次。哎,这个呢,就大家呢,去体会一下,这里边儿这个小点。那有助于呢,我们以后呢,去写这个,呃,嵌套循环。好,那么咱们在稍微的宏观上来看一看啊,这个一层for循环也好,外物循环也好呢,诶你看它就是这样的一个情况。哎,这个两层的嵌套循环呢,它就是长的是这样子的,如果这个看作是一维的话。这就是二维的是吧。哎,那么以此类推,你能不能接着想一下三层for循环呢?对,你比如说我把这个。又套到外边一个负循环里了。相当于呢,这呢是看成是一个二维的,相当于一个面。
13:00
那是不是就有好几个这个面儿了。呃,一旦要有好几个面的话,相当于就有厚度了,有厚度了相当于你看它这个立体的了呗。哎,那么立体的就出来了。哎,相当于三层for循环呢,就是一个立体的效果,就大家你想象那个魔方一样是吧。呃呃,这个或者我我就简单的要画一个这个咱们的一个立体的啊,非常非常。非常抽象的是吧。这个徐线一样是吧。是不是以前咱们上高中的不都这样画吗,是吧?呃,就是这个呢,相当于个立体了,诶前面呢,这个面我们光看这个面的话呢,假设呢,你比如它分成呃这个12344行吧,然后假设这个五列哈。12345列好,然后呢,这时候呢,这个行,你可以用这个方形完,这是四,然后呢,这是一共是五列啊这是五,这呢相当于是整个刻画的这个面,然后如果这个面的话呢,你看厚度的话呢,假设是有哎六六个。六层吧,那相当于你这个在外层这个for的话呢,是不是就控制这个六就行。
14:02
哎,这就是长这样的效果,另外外边再套一层缝呢。那就四维了,但是四维呢,好像我们已经不太能想象怎么着了,是吧。哎,就这意思啊,嗯,你像这个要数学系的话呢,诶,这个在数学当中会讲N维空间啊。这种的话呢,其实得用这个矩阵啊去刻画啊,矩阵的质是吧。刻画它是几维的这个场景了哈,像这这个我们就不多说那个了,至少说呢,我们三维以上呢,咱就好像很难形象的去给它呈现出来了,所以说呢,咱们在开发当中啊,一般不会出现三层千套以上的情况了。因为你自己呢,有点hold不住了,就啊,一旦呢,当你试图要写三层及以上,三层其实已经很少见了,如果你要写上四层的时候呢,这个赶紧停下来看看,设计肯定有问题,重新的再去整合一下这个结构,把它降成三层以下的。啊,这个呢,相当于是我们的一个经验啊,写个四呃,实际开发中。
15:02
啊,实际开发中啊,说我们不会。啊,这个出现啊,基本上就可以这样断定啊,三层以上的。啊,循环结构。啊,这个三层的循环结构都很少见。都很少见啊,所以说呢,大家知道这个事儿呢,以后在写的时候呢,你自己心里有数。啊,那二尾的话呢,这个我们还算签到还是算比较常见的啊,实际上从这块角度来讲,咱们以前上学的时候呢,呃,你像呃,我们先讲过的是这种数轴是吧。哎,这个数轴呢,它不就相当于是一维的吧。然后呢,在这个基础上呢,后来我们讲了是不是坐标系啊。哎,这个坐标系呢,这是不是就是二位的了。然后后来又上这个高中的时候呢,是不是讲了这个立体几何的时候呢,诶这个线是吧,是不是又讲了个这Z轴是吧。虚线虚线过来,这不是这轴,这不就是三维的嘛,就出现了,所以呢,因为你学历越来越高啊,这个理解力越来越强,这不就是维数上也越来越高,哎,数学系的话呢,最后来个N维的是吧。
16:03
那这样啊。好,那那关于这个事儿呢,就哎说清楚了。行,这个说清楚之后呢,我们再拉回到这个现实当中,我们再做几个需求,比如说呢,这个图形要清楚以后啊,我们接着呢,再出这个题目,也看看大家呢,上面理解的是不是好啊,现在我希望你刻画一个这样的图形,第一行呢是一个形。哎,第二行呢,两个型。你看三个星四个星。五个星行,就它吧。这个图形怎么整?嗯,还是想我们刚才说的那个外层控制行数,内层控制列数。行数好说,列数呢不确定。这是个上面这个六是确定的常数,这个呢是不确定的是吧,那关键的难点就在这儿,但是大方向来讲呢,是不是就跟那个思路一样。
17:00
啊,这咱们再先写一个吧,说方循环外层控制行数啊int I等于1I呢小于等于。五行吧。爱家家。好,然后具体的某一行上呢,写个for in的一个接,接是一接呢,呃,这块是我们的一个难点啊,接呢,暂且我们也让它是是加加的一个效果。好,在这里边写。那这个怎么弄呢?对诶这里边呢,给大家说一个思路啊,就是一旦呢,当你处理这种想写一个通用的操作的时候,你不清楚哈,不清楚的时候你就举例。诶,你说你看这个,我我比如说第一行数怎么着,第二行怎么着,第三行怎么着,就举例子。哎,包括呢,像我们讲前面题目说说这个,比如说哎3月5号是当年的多少天啊,咱们不是把这个说是哎month从键盘获取一个值,然后day呢,从键盘获取值,问是当年多少天,一下懵了。这个你不清楚的时候,你就举个例子,哎3月5号怎么着,哎4月7号怎么着,哎5月9号怎么着,哎这个呢,你知道怎么去数之后呢,哎发现呢有通用的公式,那就把它呢写成个通用的操作了。
18:11
哎,这个一样啊,哎,比如说这个位置的话呢,哎,如果是第一行的话,这个位置怎么写。第一行啊。应该是小于等于。一。对吧。哎,你看当这个H1的时候呢,接是一,接小于等于一,哎,然后只输出一次接加价变成二了,二小于等于一不满足。诶,正好第一行就执行一次嘛。啊,那么当I是二的时候。哎,第二行了,S2的时候呢,这个阶这块呢。是不是也变成二了?当I是三的时候呢?它也是三,I是四的时候它也是四,诶这不就是I吗。就写成I就行了。哎,相当于呢,我们这个位置呢,随着你行数的变化呢,这个位置也变,我们就找这个位置临界值跟行的关系恰好呢,就是这样的一种等的关系。
19:08
那也就是呢,如果这个位置啊,哎,我这儿呢,放到这儿啊,大家注意看这个呢,如果用I来表示的是第几行哈。啊,然后呢,这个街呢。诶,我看到的是每一行中。哎,这个星的个数。哎,如果是这样的话呢,你看相当于这呢,就是第一行。第二行。三。哎。五哎,那么第一行啊,星呢,就几个呢一个。两个。哎,是。五哎,这不正好呢,跟咱们这个I呢,你看是相等的关系,所以这个位置就写成等。哎哎,就行了啊。好,然后呢,这个时候我们就可以输出。
20:00
哎,注意这个呢,就不要换行了,哎打印一个星。嗯,这是我们这一行的效果啊,当这一行打印完以后呢,我们在这个位置来一个换行。诶就诶这样就行,这就是换行,然后换行完以后呢,这个爱加加啊下一行,下一行呢,你再去打一行,诶就成了。那么这个需求呢,我们就这样来处理就可以了。来看一下。编译运行,诶你看这不就成了吗。那就他。好,那么这个要是成了的话呢。这个需求又来了。哎,应该能猜到我这块整个啥是吧,对到这来。CTRLC。哎,到这来啊,到这比如说第一行这个我们就来六个吧。123456这六个星啊,然后五个。四个。三个。两个啊,补一个一个。哎,整这个效果。
21:02
哎,跟上边这个套路呢,大方向上是一样的啊,外层控制行数,内层控制列数。拿牛拿带呢,这个是随着I的增加阶呢变小了。变少了啊这样的情况哎。化循环,1I等于一,一共是由。六行,所以小于等于六。爱呢,佳佳。好放心完啊印的一个接呢,这个我们还让它是一吧,关键就是后边的位置啊接呢,暂且我们也让他下讲。哎,这么着啊行,那么下边这个事儿的话呢,里边这个其实好操作啊,就是还让他打印这个星就行了。呃,然后呢,你这个里边这个循环打印完以后的话呢,做一个换行啊,这这都好说啊。哎,主要问题就是在这儿。对,找规律了,哎大家呢,如果你呃一下子看不出来的话呢,这个咱们慢慢来啊,跟上边这个思路一样。
22:06
你看啊。这个呢,是第几行,我们还是啊第一行。第二行。三。四。哎,五。六啊,这个呢,就是你第几行,然后这个呢,就是你每一行星的个数。六。哎,我这边写着呢,大家你去找这个规律,找阶和I的一个关系式。随着它的增加,它在减少,它加一个,它减一个。哎,说明他们俩的总和是一样的是吧。I呢,加上阶呢,你发现它就等于七。哎,所以说这里边儿我们这个接的话呢,它就相当于是。七减去一个I吧。哎,那我说呀,这个位置我就写接小于等于七减个I。
23:03
哎,就这样,你说靠不靠谱呢?确实是写完之后呢,我们得体会一下,假设呢,A就是一了。哎,甲之就是一好接是一啊,七减去一,这是六吧。哎,一这是小点于六,那就是六个呗,哎,正好第一行不就是六个吗。诶,当你这个I加加变成第二行,第二行的时候呢,这个就是七减二了,哎,这五,呃不正好第二行五个。哎,就这样。哎,就这样来处理就行。OK了啊行,这那就写完了,写完以后的话呢,我们说诶这这是不是就完事了呢?诶这个你可以直接跑一下看看效果呗,所以这块呢,你不要硬去看代码啊,你就该运行的时候就跑一跑出错了,我们回来改啊。走起。从这块儿到这块,这不就出来了。哎,这就行了。行,那这个输完以后的话呢,其实顺带呢,我们就做了一个这样效果的一个图。哎,那如果说让你去输出一个这样效果的图,大家就可以把它分成两部分,诶你当然你这这个六呢,我们是刚才是分到下边的啊,你也可以把它分到上边啊,说这是一部分,下边是一部分。
24:09
哎,就可以了。那这两个呢,就不再给它和了,因为呢,呃,随着I的变化,这个阶的变化,它们俩的规律呢不一样。一个是越来越多,一个越来越小,所以这个呢,就没法再去合了啊。那就这样个情况就行啊。好,大家呢,去体会体会。嗯,体会体会,嗯,这个如果要是可以的话。还可以有更难的是吧?啊,对。嗯,这个把这啊,呃,这个咱们在课件里边呢,这块放了一个就难度更大一些的是吧。嗯,这个放这儿了啊。我得让他点着头,这样呢,这个效果更好分析一些啊。诶,这个效果的。
25:00
这个显然呢,比刚才这两个更难一些啊。这个。怎么样?好弄不?还行吧,就是会者不难,难者不会的事儿是吧。哎,第一遍接触的时候呢,说还行的同学呢,第一遍的时候呢,估计也不是太行啊,现在会做了,说还行是吧。啊,就跟高考的时候呢,大家没考的时候,实际上谁都哆嗦是吧,诶当考完以后的话呢,说哎呀我当年都没咋复习是吧。一看我上了一个211,当年时候他腿哆嗦的时候呢,这个是吧。他都忘了行。把这个我们先先停一下啊。
我来说两句