00:00
接下来我们给大家介绍的内容是嵌套循环啊,那嵌套循环其实在很多代码里边也是比较常见的,比如说如果说我们想要遍历一个二维数组的话,大家知道如果变历一维数组的话,我们直接遍历索引,或者直接用增强for循环遍历里面的元素,一重循环直接搞定,一个for循环搞定,那如果要是二维数左右应该怎么办呢?哎,那就相当于我必须要先遍历一个维度,遍历每一行,然后呢,呃,就是遍历所有的行,然后呢,每一行里边又要去遍利它的每一个元素,这就相当于必须要有一个for循环套,For循环就是循环嵌套啊,或者有时候我们也说它是叫做多重循环,所以接下来我们就来在代码里边看一看skyla里边是怎么样实现这样一个循环嵌套的。我们还是把前面的分界线先复制一下。接下来是第五个内容循环,很好,当然了,最简单的方式啊,跟Java里边的实现一样,那就是双重套循环嘛,一个推导式,比方说我们当前是一个呃,三乘三的,它的一个二维数组,或者说我们就是比方说横有有三个。
01:24
纵向列也有三个,然后接下来呢,我们一个I一个J,然后接下来我们要打印的就是I等于多少,J等于多少,把它完整的做一个输出,相当于一个矩阵的输出了啊啊,那接下来I是这个从一到三,那么里边J也是从一到三,然后同来我们做打印的时候,哎,那就是I于当前的I加上J等于当前的J,这个写法其实是非常简单的啊,Java里边的写法就是完全一样。
02:08
大家可以看到总共因为是双重for循环嘛,所以I有三个取值,J有三个取值,那我们可以认为就是三行三列,那不就是九个值吗?所以我们写出来就应该是一共有九个值啊,这就是对应的这个循环嵌套的一个写法,那在盖拉里边呢。可以像Java一样用这种方式去写,那大家会发现这个多重方循环其实写起来看的不太舒服,不太方便,对吧?而且我们会发现啊,不管是二维数组也好,还是我们当前的这个I和G2个维度去做这个考量也好,它俩其实是完全等价,完全平等的地位,你这样把它嵌造起来的话,看起来好像外层循环I好像会重要一点啊,那里边儿这个J好像范围就小一点,其实它俩是完全对等的,那怎么样在这个代码里面能够让它更简洁,而且体现出I和这的平等地位呢?
03:04
盖LA给我们提供了这样一种写法,把它们直接写在同一个哦,推导式里边写在同一行啊,那只不过呢,中间就要用分号去做一个分割啊,所以就是一到三,然后后边A1到三就是这样的一个写法,当然了我们这里边也可以改一下啊,比方说我们这个是四,这是一到五,那大家现在知道这就是一个四乘五的一个一个矩阵了啊,最后应该有20行数据输出,我们还是把这个做一个输出,下面这个I和J既然已经都定义出来了,那我们现在其实就有两个循环变量在下面都可以做一个使用。前面我们还是把这个做一个分割线,看得更清楚一点。我们看当前的这样一个脑循环的直线啊,跟前面其实是非常类似的。
04:03
只不过代码会更加的简洁,而且一目了然,当前是两个维度的变利,两个循环变量,一个I,一个ji是一到四,J是一到五,那就是四乘五最后二层数据输出,啊,这是这个盖拉里边的嵌套循环的这种简写形式啊啊,那有了这个例子之后,那。接下来我们就来做一个简单的练习,这个练习其实非常的经典,那就是我们使用一个双重造循环实现一个九九乘法表,啊,大家可能知道九九乘法表的话,我们最终打印出来应该是类似于这样一个。叫三角形啊,就相当于是一个斜的这个阶梯状的这样一个三角形,对吧?啊,上面可能是这个一一得一,后面就是这个一二得二,二二得四啊,然后每一行每一行都会多一个,最后一行是所有这个呃,九的那些乘法,所以这是我们一个简单的需求,也是体现我们这个编程基本功的一个地方啊,下来我们可以把它做一个实现。
05:10
那我们直接可以在后边拗一个scla的object,这个我们叫零三,我们这其实是一个练习了啊,Practice我们把它叫做乘法表啊,Multiply table我就叫ul table,那这个具体的实现如果用双重报循环,就是我们R里边的那个写法的话,大家应该非常好理解,那首先就是定义一个I艾层,我们控制这个行,那就是一到九了。一或九它里边那层再定义一个A,同样大家要注意,一是当前行里边的。
06:01
到底有几个算式的这个控制相当于有多少列,那大家看每一行应该拥有的这个列都不一样,对吧?行数一共是有九行啊一行。可能就只有一一列,一个一得一,第二行呢,啊有两列,112得二,二二得四,第三行有三列,所以我们当前的这个列的数量其实是跟当前的行号有关的,哎,那所以这个好像,呃,把这个J放在I的内层也是有道理的,我们直接就1TO up哦,跟当前的行号一致就可以了,然后在里边呢,啊里边怎么控制呢?那这里边当然就是直接print line一个打印,然后这里边打印的时候,我们可能要打印那个算式稍微的复杂一点,我们自然想到了,可以用前我们讲过的啊模板字符串,这个字符串差值就比较简单一点,我们可以,呃,就比方说我们第一行要输出的是一得一,第二行呢,输出的是一二得二,二二得四,啊,那如果说要是输出这个一二得二,二二得四的话,大家会发现我应该是先把J放在前面,那所以前面应该是Dollar j,如果后边。
07:14
分得开的话,里边不加花括号也是可以的啊,那后面我空一格,然后去写一个乘号,接下来是Dollar I。后面等号后边是它俩的乘积,那乘积其实也不用单独做计算,我是不是直接在这个Dollar里边做一个I乘J乘出来就完事了呀啊大家如果想空一格的话也是可以的啊,就是一个完整的实现,当然了,目前这一行我最好每一列啊,最好不要直接就换行,因为我希望是把它排在一行里边嘛,所以当前应该是直接一个print,然后后边再加一个啊D哎,杠替表示后边加一个制表符分开,接下来下一列放在后边来那。
08:02
这就是涉及到一个问题,就是我当前行处理完之后,是不是还得做一个做一个换行输出啊,哎,所以当前其实就是这不就是当前行吗?所有这个这个算式都输出完了,那最后我再来一个print起来,这样不就完了吗?啊这其实大家比较容易想到的一种方式啊,就是我们这个输出九九乘法表,好,那我们来运行一下,看一看这个效果怎么样。大家看到没有问题,这就是我们最终实现的一一得一,一二得二,二二得四啊,一直一个这样的直角三角形啊,有点像一个矩形的下半个三角啊,这就是我们想要输出的结果,那当然了,按照我们前面讲过的scla里边的简写形式,能不能把它做一个简写呢?那其实是可以的啊,但是这个简写稍微有一点复杂,因为这里边我们涉及到了一个内层放循环啊,就是它里边每一行写完了之后,我才做了一个print line,如果这个printline是在里边的话,那就简单多了,直接把这这个直接放在这个呃,I的后边,接着就完了嘛,现在的话,那这个怎么做呢?
09:17
那其实这个整体来讲也是一样,我先把这个copy过来。还是首先A的这一个便利怎么办呢?直接跟在I后边就可以了,而且大家看到,因为前面我已经定义了I后边J,我定义是从一到J,呃,一到I,这是完全符合语法的,这是不报错的,没有问题。好,那接下来,接下来要做的当然就没有这一个内层的for循环了,就是这个print line,那这里的这个就是这里的这个print,啊把这个算式打印出来,那后面这个换行又在什么地方换行呢?其实这个也简单,我只要做一个条件判断不就完了吗?什么情况下才做换行呢?其实就是当前。
10:02
行不已经,但是都已经输出完毕的时候才换行,那什么情况下输出完毕呢?不就是J已经等于I的时候吗?哎,所以当前其实就是if a等于I时候的时候,就做一个换行输出,所以大家看我们如果用这个方式写出来的话,代码会更加的简洁,输出的效果还是一样的。哎,这就是。循环嵌套啊,实现了一个九九乘法表。
我来说两句