00:00
大家好,我是海波老师,我们继续来讲讲Java中的二维数组啊,原理性的东西呢,咱们讲的差不多了,那么接下来呢,咱们准备应用一下二维数组来实现特定的需求,我们这里呢,我们拷贝一下,我们写上一个下划线啊,咱们写上它叫test,然后点击OK,点击OK以后把里面的东西呢,我们全都不要啊,把它去掉,去掉以后呢,我们写上它啊,咱们叫二维啊宿主就可以了,还记得咱们之前给大家讲的那个叫九成妖塔的练习吗?啊,咱们之前呢,是采用的是那个循环打印字串的方式给大家实现的,那么接下来呢,我们准备呢,用二维宿主的方式给大家实现一下,呃,不知道大家还记不记得我们之前那个九层妖塔啊,咱们这里来协商一下。所谓的九层妖塔呢,其实就是用我们的星号啊,这种特殊的排列方式来打印出来的一种形状,这种形状呢,是一种特殊的三角形,我们如果能够把我们的星号以这种方式打印九行的话,我们就称之为叫九成妖塔,对吧?我们就称之为叫九成妖塔就可以了,所以啊,同学们我相信啊,就是这个东西我们之前讲过了,大家应该还是有印象的,对不对?现在我们需要用我们的二维数组来实现这个功能,那二维数组的话,我们说过了,不就是行和列吗?首先我们就得确定一下我们当前的二维数组有多少行,有多少列了吗?好,那这里我们先写上它,我们叫做肉,诶,那还说啥呢?九乘妖塔,九乘妖塔那不就是九行吗?每一乘不就一行嘛,所以咱们写上一个九没问题吧,同学们好,那现在我写上一个我们的字符串,加上一个中括号,再加上一个中括号,写上一个叫做nine,我的tower等于我们new,咱们string再来一个啊,咱们再来一个,再来一个好了,然后呢,我这里呢,就写上肉,啥意思,你不说九行吗?哎。
01:42
诶,我们的第一个中括号里面不就是行的意思吗?我的第二个中括号里面不就是列的意思吗?对不对?同学们,这个咱们讲过吧,好,如果你这个明白的话,那咱们现在就循环了,循环的时候来,我们写上它,咱们现在呢,Int I等于零,然后呢,I小于咱们的肉,好,再来I加加,这是什么意思啊?同学们,这个不就意味着是把我每一行循环便利吗?对不对,这一行便历,这一行便历,这一行便历,不就这意思吗?所以啊,我们现在把行的概念已经准备好了,那么接下来呢,我们要看的就是我们的列了,对不对?那咱们的列呢,我写上它,咱们的这个列它等于多少呢?同学们。
02:20
其实啊,就要找规律了,其实这个咱们是不是之前找过规律啊,同学们,咱们之前给大家找过规律啊,咱们想想他你当前我的第一行是不是我的一列呀,那然后呢,我的第二行是不是我的三列呀,我的第三行是不是我们的五列呀,那么以此类推的话,如果是我们第四行是不是应该就是我们的七列呀,来咱们看看啊,咱们来看看我写上它星号星号星号星号,诶咱们数一下1234567,没错吧,说明咱们这个规律是正确的呀,同学们。规律没问题的话,那我问你这个列该怎么求出来呢?其实大家想一想啊,咱们当前循环的时候啊,是从零开始的,也就意味着我们这其实应该是零吧,那么也就意味着我们现在是第一行说的是从一开始,但咱们循环呢,是从零开始,所以我们当前的这个列啊,应该跟我们的一个转换有关系,就是把咱们的这个行转成我们的什么索引的概念,哎,就是这样的,好了,转完了以后,他再看一看,它们之间相差二啊,所以我们的二再乘以当前的值,再加上一不就行了吗?同学们,这个大家能不能明白呀,如果大家能明白的话,咱们就算一下啊,咱们试一试,如果当前是我第一行的话,一减一是零,零乘二加一不就是一吗?如果是我第二行的话,二减一是我们的一一乘二加一是不就是三,如果是我们第三行的话,三减一是二二乘二十四四加一是不是就是五啊,说明我们这个规律是正确的啊,只要把这个规律找到就没有问题了,诶找到没问题的话,同。
03:52
同学们,那我现在呢,来我们写上一个for循环,我们在这里就写上一个勾,它等于零,然后呢,写上一个勾,它小于我的列,然后呢,我的勾加加我的行和列不就都有了吗?同学们,那既然我们现在都有的情况下,我就给每一个小格子里面给它附上值了,那咱们这个赋值呀,就比较简单了,来咱们拷贝,拷贝以后把它的中国号加上。
04:16
然后呢,写上一个I,然后呢,我们再写上一个勾,这样的话,我的行和列不就都有了吗?都有了以后我写上一个横线,哎,有这么写,我给个横线呢,是希望有个占位符的感觉,就是把它打印出来啊,你别到时候你几个空格啥也看不到,那也不行,所以呢,我们现在呢,把它附上值以后,我再拷贝一下,我们在下面呢给它打印一下,所以我们打印。打印的时候呢,直接去掉,我们直接打印就可以了,好了,我们运行一下,咱们看看结果啊运行。运行以后大家看结果,诶,我这好像哦,我这好像出现错误了,同学们看一下我们当前这个地方好像忘了把这个列往里面放了,对吧?诶刚才忘了往里面放了啊好,我们重新再来运行一下,运行以后看结果,同学们你会发现,诶不对,老师你这还不对呀,哎,不对的原因啊,是因为我们没打印一个横线,是不是我们就换行了,所以啊,咱们之前说过这个事情,我们这个地方呀,我们只有在一行全都打印完之后,我们才应该去换行吗?你就不应该直接加LN了,对吧。
05:18
你不加他的话,我们需要在每一行结束之后再去回车换行,所以我们这里呢,这么写是可以的,同学们还记不记得咱们之前给大家讲那个九层妖塔啊,说过这个事情,所以呢,我们再来运行一下,运行运行以后看结果你会发现没有问题。好了,同学们,那既然这种方式没有问题的话,那么现在我们只需要想办法把那个星号往这个地方一换是不就可以了,把对应的位置的横线啊换成咱们的星号不就可以了吗?所以那这个我们该怎么去赋值呢?我相信让大家自己去写的话,一定是可以写的出来的,为什么呢?因为规律咱们之前分析过,我的第一行打印一个,第二行打印三个型号,第三行打印五个型号,那不还是我们所谓的1357这种方式吗?对不对?所以啊,从这个角度来讲的话,我们只要找到规律,你把它的起始点找到,那不就OK了吗?所以我相信啊,这个大家自己下来试一试,应该没问题啊,但是呢,我们这里呢,给大家找一个新的规律,提供一个新的思路。
06:18
诶,比如啊,大家看我们当前这个形状,这个形状其实呀,我们把它来分解一下,你会发现它其实就是一个左右对称的一个轴对称图形啊,诶有条线对不对?那么也就意味着如果你能够把这条线先找出来的话,那么两边不都是一模一样的吗?对不对,那这样的话操作起来不就更加容易了吗?比方说我们这个减去一个一,这边加上一个一不就出来了吗?我们这边减去一个二,这边加上一个二,诶也出来了,这边减去一个三,这边加上一个三不也就出来了吗?所以啊,它既然是一个轴对称图形的话,我们找到中心点,再往两边去加就可以了,哎,老师啊,那中心点咱们怎么找呢?所以啊,咱们这里还得去找相应的规律啊,同学们,咱们中心点,或者说中心这一列应该是多少呢?咱们来分析分析,如果呀,你当前是我的第一行的话,中心是哪儿呢?记住如果我们只有这一行的话,那么他自己就应该是我中心的一列,对不对,所以就是零。
07:18
什么,我们的索引是从零开始嘛,对不对。好了,接下来如果你是第二行呢,第二行有三条数据啊,那么这就意味着你中间的那一列不应该是零一,那就是一吗?那好,再写上我们三行,第三行的话,012,诶,你这个是中间的一列啊,所以它恰恰就是二,那好,如果你是第四行呢?第四行的话恰恰呢,0123,哎,同学们有没有发现?规律不就找到了吗?你当前的中间那一列不就恰恰跟我们的行有关系吗?咱们当前如果有我们的九行的话,那么它中间那一列是不是应该是八呢?所以啊,我们这个地方大家看看,我现在就得判断一下了,什么呢?我写上if括号,括号以后我写上那个叫做列,列如果等于什么呢?等于我当前的行减去我们的一,那这样的话就意味着你是中间的一列,那么我打印的就不能是横线了,我应该打印我的星号吧,所以我们这里呢,把星号给它写上,然后呢,我在这里再打印咱们的横线,这个大家能不能明白?
08:24
好了,同学们,我们来看看啊,咱们运行一下,看一看运行运行以后看结果你会发现,诶,你看到没有,我中间的这个不就已经打印出来了吗?那你中间这个打印出来了以后,那么我们接下来要做的不就是往两边,我看看这边应该打印几个,这边应该打印几个了,对不对?同学们,诶老师呀,那这个该怎么去分析呢?其实啊,我们左右两边加星号的话,我们其实也是有规律的,那咱们就来分析分析啊,咱们怎么分析呢?跟刚才一样。咱们比方说啊,咱们循环的第一行的时候是零啊,如果是零的话,我们把哪几个列打印成我们当前的这个型号呢?诶不就是中间这一列吗?所以就是把八这一列,那如果我们现在循环的是一呢,那么现在我们就是第二行,第二行的话应该是八。
09:13
左边这一列不就是七吗?后面不就是九吗?所以它打印的应该是789,没问题吧,同学们,那好,如果现在是我的什么二呢,就是第三列呢?第三列的话就应该是我的六七八九十吧,所以咱们接着来应该写上一个二,然后呢,写上一个我们的六,然后写上一个什么我们的十,同学们,规律有没有找到,我相信大家已经找到了吧。你把这个对齐一下,你把这个对齐一下,这难道不是个三角形吗?啥意思?你这是一,你两边就是一,你这边是二,两边不就是二吗?对不对?哎,两边就是二,所以啊,我们当前跟我循环的这个012不就有关系了吗?只要你大于等于它,小于等于它不就行了吗?这个值怎么算出来,不就用你当前的列干嘛呀?减去我们的行就行了吗?这个大家能不能明白?好了,接下来呢,我们把这就改一下,我们这里首先就写上一个我们的大于,这个大于呢,就说的是我左边的这个数,这个数呢,应该是我中间这一列减去你当前的行吧,你当前的行那不就是我的I值吗?所以我们写上一个I,这就是你当前的行啊,然后呢,我们继续来,我们再把它拷贝过来,拷贝过来以后,同学们你要记住了,我们的右边呢,应该是我们小于等于对不对,小于等于,然后呢,我这个应该是加上那个I加上那个行吧,你是八,我加上一个一,不就是九吗?哎,你这么写就可以了。
10:39
好,同学们,我们现在再来运行一下,只要把这个规律找到就可以了,来我运行运行以后看结果,你会发现我们当前这种方式是不是就可以了呢?哎,九层妖塔我们这就已经写好了,不过呢,我这里就不能写横线了,我加一个空格吧。好了,加完空格以后,我再重新执行一下,同学们观察一下应该是没有问题的,对不对?所以你会发现,如果用我们的二维数组的方式实现这种九成妖塔的这种形状,其实还是比较容易的,只要你找到其中的规律,有的时候可能会比我们之前那种循环打印字符串这种方式更加的方便,为什么呢?因为规律更容易去找嘛。
11:17
啊,老师啊,我这个规律不好找,没关系,慢慢来啊,先把我们基本的语法学明白,我们再去找找其中数据的规律,这样的话,我们很多的一些算法呀,咱们就能搞明白了,行了,同学们,我们这个九层妖塔的小练习啊,咱们就做到这里。
我来说两句