00:00
好,那么这一章里边呢,我们讲的第一个内容呢,就是叫异位数字的使用,哎,这呢我们就告一段落了,核心的知识的话呢,就是这六个点,诶大家呢,建议下来练的时候呢,先从这六个点出发啊,对应的我们相应的知识点呢,你先敲一敲,熟悉熟悉,然后呢,你再去做这个练习啊,别上来就做练习,这块可能就有点懵了啊,就所有的练习呢,其实都基于我们对知识点的一个熟悉和巩固,所以先把知识点先弄清楚,这叫万变不离其宗啊。好,那么一维数组呢,我们说完之后呢,接着的话,咱们再来看一下二维数组。那那如果说一位数组你要觉得稍微有点吃力的话呢,呃,二维数组得更吃力是吧。诶,但是这块呢,其实也没有想的说就那么困难了啊,那它呢,就类似于咱们前面讲的这个one呢,好比是啊一层的循环结构,然后呢,这个to呢,就好比是呢,我们两层的嵌套循环了。其实从那个知识点上来讲的话呢,也也有一点,但是呢,没有那么多了,诶那你要是基于一维速度,要是熟悉的话呢,二维速度其实大家学起来也会很快的。
01:03
好,那么首先的话呢,我们关于二维数组呢,有一个理解啊,这呢,我们直接来看一下这个课件。K2这块呢,我写的叫多维数组的一个,使用二维三维,这个我们都算叫多维了,首先Java语言里呢,提供了支持多维数组的语法,那我们可以去定为定义二维三维这样的数组。所以呢,如果我们把一位数组呢,看成是几何中的这个线性图形的话呢,二位数组呢,就好比是一个表格了,哎,比如说这个Excel里边一样啊,Excel的话,你比如原来我们刻画这个,诶这个名称的时候呢,就是死锥形的数组了,原来你要刻画这个电话号码的话呢,也是一个死锥形的数组,说现在的话,你发现呢,诶这个好像是。这个更复杂了,什么叫更复杂呢?这个元素的话呢,首先我看成这是一个整体。然后呢,这是第二个元素啊,以此类推啊,还有这个曹曹老师是吧,我都给打码了啊哎,这个诶每一行的话呢,咱们看成是一个元素的话呢,这不就有好多元素了。然后你去细看的话呢,发现具体的这一个元素呢,又有两个元素构成。
02:04
啊,那也就是说,如果我们把外层这看成是一个一维数组的话呢,发现一维数组的元素。又是一个一位数组。只不过呢,这块只是有俩元素而已,哈,诶这呢,其实我们就看成是一个二维数组了。诶,或者换句话说,我们看这个这个围棋的这个棋盘也是一样啊,呃,你要是异位数组呢,就好比是这一条线上啊放了几个元素,这就是一位数组几个元素了,说呢,我这儿有好几个这种一维的数组,那整体上来看的话呢,我们就算是二维的数组了。诶就是这个意思,好,这个大家可能有一个感官上的一个简单理解,我们再去举几个例子,比如说诶某公司呢,把2022年全年每个月的这个销售额呢,做了一个登记,那这个登记的话呢,咱就放到了一个int型的数组里了,这呢就是每个月的这个销售额。说现在呢,我不想这样排啊,我想呢,按照季度为单位进行存储。那一共呢,是四个季度嘛,一个两个三个四个,但是每个季度里边呢,又是季度的每个月的。
03:04
哎,你看就出现这样的特征了。这其实就是咱们说的这个二维数组了。你看啊,大方向来看的话呢,这不是一个。两个三个四个,这不就四个季度吗。哎,看成是外层这个数组的话,一共是有四个元素了,然后呢,每一个季度这个元素里边呢,又有三个元素。啊,1233个元素啊,那这呢,就相当于是外层的这个数组的元素,里边呢,又是一个一位数组。哎,就是这样的一个。特点啊啊,这是一个举例,然后再接着说呢,这个高一年级呢有三个班,诶每个班呢有几个同学哈,诶这呢是诶第一个班呢有仨人啊,第二班呢有俩人,第三个班呢有四个人是吧。哎,这就是我们一些这个小说的人物了哈,呃,现在的话呢,我们从整个年级的角度来看。啊,从年级的角度来看的话呢,就是年级里边,年级里边放的是班哈,所以这是一个班,这是一个班,这是一个班。
04:01
哎,三个班,然后每个班呢,你发现又是一个数组里边再放具体的这个同学。哎,这呢就构成了叫二维数组了。那因为呢,你这个元素呢,这不都是字符串嘛,所以这就是钝形的二维数组。诶这呢,就是我们定义二维数组这样一个格式了啊好再举一个实际开发中的一个例子,比如说这个以五八同城啊,这呢我找了几个啊五八同城这个诶比较典型了,呃,这呢是它的一个首页面啊,首页面里边呢,比如说这个58APP商家APP1234这四个呢,篮框我们可以看成数组中的。四个元素。你可以用字符串来表示哈,哎,这呢四针形的数组里边呢有哎四个元素,然后呢,你会发现这有个下拉框,这个下拉框呢,你往下这个诶一拉的话呢,发现它又有好几个元素。现在这个元素呢,它不是一个纯粹的就是一个呃,字符串啊,一个数了,它里边呢,还有好几个元素。哎,所以呢,由啊,你看是不是可以这样理解啊,呃,由一个数组,这呢是一个数组了,它呢作为了我们另外的一个数组的元素出现。
05:03
啊哎,上面这个也是一样啊,说呢,这是一个数组,这是一个数组,这是个数组,这三个数组作为了我们外层这个大的数组的。啊,三个元素出现了,那我们就把它称为呢,叫二维数组。啊,就这样的一个概念啊,你在这个位置我们抽象来看哈,这是一个数组,这个数组这个数组,然后呢,这三个数组呢,又作为我们一个新的数组的三个元素出现的,那我们就称为了这二位数组,哎,这呢也一样的道理。所以呢,这里边儿有一句话,对于二维数组的理解,可以看成是一维数组又作为另一个一维数组的元素而存在。你看啊,我再换一个场景说,对于嵌套循环的理解,可以看作是一个循环结构。又作为了另外一个循环结构的循环体存在的。哎,这不就一个套路吗?然后下边说呢,从底层的运行机制来看呢,其实没有所谓的多维数组。
06:04
这个大家能理解吗?能啊,你看这儿,我们这儿呢,你说这叫二维,我们只是起个名叫二维,其实你细看的话呢,这不就还是一个一维的,里边呢,放了仨元素,只不过你细看发现元素呢,又是一个一维的。我们把它称为二维而已,是吧?哎,好的啊,所以呢,这块这两句话啊,CTRLC一下,哎,回过来关于二维数组的一个理解。啊,稍微的大家感受感受。啊,这个呢,就是我们说的这样的一个这个知识点了啊。呃,一位数组作为另外一个一位数组的元素而存在的,哎,我们就称为呢,叫二维数组。OK啊行呃,那么关于二维数度呢,它使用的这个基本点的话呢,跟咱们一维数呢,是完全一样的,那不妨呢,我把一维速度咱们讲的这六个点呢,我就拿过来啊CTRLC。回过来,呃,还是这六个点,首先二维数组的生命和数字化,怎么调用二维数组中的指定元素,呃,二维数组这个也有个属性叫lance,这个我们怎么看一下这个LS的这个事儿,呃,二维数组的变利。
07:06
啊,二位数组元素的默认初始化值啊,二位数组的内存解析还是这几个点。那咱们呢,就按照这个顺序来,下边呢,这块也是提供了两个啊,第一个里边呢,我们讲的是前四个事儿,后边这两个呢,讲的是后两个事儿。好,那我们直接呢,就看这个了啊,关于二维数组的使用啊,相对于一维来讲稍微难一点啊,但其实呢,咱们说也没有本质上的二维了,就是比一维数组元素又是一维的,那就是二维的了啊。好,那这呢提到一个数组的声明和初始化了,呃,咱们就来写一写了啊呃,写一写的话呢,一位数字咱们的已经比较熟了,呃可以先写成一个叫复习吧。好,因特型的一个一位数组,举个例子啊,AR1又一个因特型的啊,一位数组,这样封一下,这个呢,我要写个四。啊,这呢是我们说的叫动态初始化了啊,静态呢,就这里边整一个为123。那这是一位的好,怎么判断你这一位的呢,就是我们这有一个中括号。
08:02
那你要是二维的呢。就是两个中括号。哎,这个我们叫A2啊,然后这块new的话呢,自然而然的也就是放两个了。OK啊好,那这放两个的话呢,咱们也整个大括号,注意哈,这个咱们叫二维了,相当于你的这个数组的元素是一维的。所以我要上来就这样写,是不是就不对了?那怎么办?对,你这里边儿,比如说有一个有两个假设咱们有三个是吧,相当以外层来看的话呢,我有仨元素,然后呢,三个元素呢,又是一个一维的,哎,我写个比如说这是123。啊,这呢,来一个比如说A45。这个来个6789。哎,就这样子的。那这个呢,就是我们的一种方式,那跟我们一维呢,做一个迁移,这相当于是是不是一个叫静态初始化呀。啊,静态初始化,哎,咱们理解成这个叫哎方式一是吧,哎静态初始化,那有静态呢,就有动态的。
09:02
哎,动态,哎出。石化是吧,哎,那这块呢,这个类型其实呃,都可以是其他的任何类型,我这呢写的是int类型了,你可以换成其他类型,比如说string类型是吧,二位数组A23。啊,然后又一个诶string类型的,诶两个中号这个动态数化呢,跟咱们前面讲的这个思路是一样啊,诶所谓的静态呢,就是数组这个变量的赋值和数组元素的赋值呢,同时进行是吧。我再写一下啊。哎,数组变量的一个赋值和。哎,数组元素的。这个负值。哎,他们呢是诶同时进行这个呢,就叫静态初始化。啊,那么动态初始化,那就是数组变量的赋值和数组元素的赋值呢,诶分开进行。啊,这呢是我们这个动态,哎,方式二啊好,那么这个动态的话呢,言外之意就是我们这呢,不要写这个元素的值了,那你不能写元素的值,咱们说了数组只要初始化完了,长度就确定了。
10:05
是不是得指定长度啊?啊,这呢,比如我写个三,这写个A。哎,这呢有少一个哈,哎,我这写个三。哎,这里写个四,哎。这就可以了。那那你想这个怎么理解呀。对。就是从我们这个数组角度来看哈,我从外层来说呢,是不是先有三个元素是吧,诶三个呢,每一个里边呢。对,再放这四个。哎,再放四个。哎,这样的一个意思,所以这块为了我们方便去描述哈,诶在这呢,我引出两个词来啊,这个一个词呢,叫做外层元素。那叫这个,咱算是一个概念吧。叫数组的外层元素啊,这是一个概念,另外呢,叫数组的。啊,那一层。啊元素啊,有这样的一个区分。OK,有这样区分,比如说这是异位数度,作为另外一个数度,它的元素存在了,哎,它的这个元素呢,就是外层了,然后这个的元素。
11:04
啊,它里边这个元素呢,就是内层的了。行啊,然后再拉回来啊好,那这呢是我们说的一种方式,那对于二维来讲呢,其实还有一种方式哈。还一种方式,比如说我这写成是一个double吧,嗯。二位数组,我叫AR4哈,哎,你一个。哎,Double型的,哎这么着是吧,这呢显然是不对了啊,我在这个位置呢,我只写一个,比如我写个二哈。后边这你看我没写。你看没报错。那说明在这呢,也是一种方式。那这个你可以叫哎动态初始化方式一,哎这个我们在哎这样啊,CTRLC一下,哎动态初化的方式二。哎,就是这个对这个呢,也对这个理解的话呢,就是相当于我们这儿呢,从外层来看呢,是有两个元素是吧,这两个元素呢,都是元素都是数组了,但是呢,你这里边儿有几个呀。不确定是吧。对啊,就上面这个确定了写四,那就是说这有四个,这呢也有四个,但是这个没写没写呢,我们后边在调用的时候呢,我们可以赋值,你可以说这里边有四个,这我可以有五个了,这不就灵活了吗。
12:10
哎,所以有的时候呢,会用这个,有的时候会用这个啊。好,这呢,就我们说的这个初始化的这样的两种方式啊呃,三种方式吧,算啊这个完了以后呢,我们再可以写其他的一些这个,比如说啊其他。哎,这个正确的这个写法。啊,其他证据七吧,其实这块也就涉及到了,诶,我们这个中括号的一个存放位置的问题了,啊这呢,我写成是一个五了,这个中号呢,我们前面也讲过,你可以放到后边吧。哎,那这呢,就是一种写法,好在CTRLC。哎,那你也可以呢。前面一个。后边一个。行吗?只不过呢,我们平时没真人这样写啊,是不是自己给自己找麻烦嘛,是吧,看着都费劲啊。好,然后呢,还可以呢。哎,这个我们改成七啊,咱们说了,你要是声明和初始化啊,就在这一行的时候,对于这种静态初始化呢,这个位置呢。
13:04
就可以省略了是吧,哎,我们称为呢,叫。类型推断是吧。哎,这就可以了。哎,就这呢,都算是这个正确的写法。啊,这个呢,其实没什么发挥的,这个你也可以把中号往后放是吧,这个类似的道理啊,呃,也也是一个。还有一个八是吧,哎,这个中号的话呢,你也可以,哎往这一升啊,其实跟这这个呢是一个一个道理啊,这呢是正确的,然后除了正确的,其他呢就都是错误的了。哎,就是说这个幸福的家庭呢,都是类似的,不幸呢,是各有各的不幸是吧?哎,正确呢,都是这么几种方式,除了正确的,其他的错误的方式那多了去了啊,少个分号都算是吧。好,那这块呢,我们整俩错误的啊。比如说这块我们CTRLC啊拿过来,嗯,这个呢,改成叫九啊,在声明完的同时呢,嗯,这个位置你还想给这个,我们给它改成固定的吧,比如说大家都一样哈。
14:02
给我们少一个。哎,这个你看每个都有仨。啊,一共呢,这个外层呢来讲也有仨元素,所以你说哎,我把这个补上啊。只有画蛇添足了。啊,你说这叫静态啊,叫动态啊,这不乱套了吗?这不行啊,哎,你呢也不能啊,CTRLC粘过来说呢,我把三写到这。这叫十的啊,这个不写了。也不行。对,就除了这个正确的,其他的你就不要自己去发挥,我也不发挥太多了,发挥多了你反而记得还挺清楚的是吧。啊对,你就记住我们上面这个写法就行啊,建议呢,你就标准的这样去写就完了啊,推断的这块呢,到时候有可能会去写啊呃,也就可以了,中号呢,你就就放前面。就OK啊。好,那么这儿呢,就我们关于这个声明和初始化呢,咱们就说完了。然后第一个问题我们就告一段落了啊,那基于第一个问题呢,我们接着来看这个第二个问题,第二个问题的话呢,说这个数组元素的一个调用。
15:02
那速度元素调用,比如说咱们就拿它先来去说一下啊。再重新截一下。呃,因为呢,它呢我们赋值了啊呃,比如说现在呢,我们想去调用这个数组的元素,首先明确一下你这个元素指的是谁是吧。哎,这呢,我们在这样说一下啊,刚才那那块也讲外层元素和内层元素了,所以呢,我们说哎,针对于这个AR2啊来说这个外层元素。啊,这个外层元素呢,其实指的是我们的。呃,比如说这是一个里边呢,是123是吧。哎,这个是叫外层的一个,然后呢,呃这仨呢,呃这两个呢,这是叫外层的。就是最外边这个大括号。是吧,当然我把这个内层呢,其实也写到这儿了啊,就是你这几个呢为代表的这叫外层了,然后呢,所谓的这个内层呢。其实我刚才写的时候呢,这外层里边已经把内层都写出来了哈,内内层元素。
16:04
其实就是你最里边的这个所谓的,比如说123。呃,456是吧。嗯,789,诶这呢都算是内层的这个元素了,这块大家主要看外层的这个大括号啊,细节呢里边呢先不用管啊好,那么现在呢,叫数组元素调用,那你得说清楚你是调外层元素啊,还是调内层元素啊。是吧,得说清楚这个事儿啊,咱们现在呢,先来考虑,呃,调用内层元素。好,那么针对于这个数字来讲,比如说我现在想把这个一调出来。你说怎么写?A2是吧。诶,是不是先是从外层来看是第一个吧。哎,就这样吧。然后呢,这里边儿呢,再去找。这还是个数组是吧?哎,再去找它的第一个元素吧。哎,所以这样的这个一,哎,这就出来了。好,Run一下。那你看这时一不就出来了吗?
17:01
好,那么依次类推,这个思路呢就比较清晰,诶,这呢是一啊,我想把这个七打出来。哎,对,这个是二,就是相当于是这是哎012是吧,然后七呢是第二个元素,这写一是吧。啊,再去run一下。哎,这个气一看就出来了。哎,这样是吧。好,那这时候呢,我们就知道呢,诶这个所谓的内层元素怎么去调啊,就先呢,把你外层元素呢先调出来,然后呢,再找里边的元素了。就这样啊,其实咱们一般说元素调用主要指的都是这个内层的事儿了啊,哎,那么呃,接着我们再看一个吧,哎,调用外层元素。哎,外层元素,那其实就是我们这个,比如说A2,我这样写是不是就外层了。对,我把它打印一下,咱们打印一下吧,那你觉得这个我打出来的是什么呢。啊,可能有同学说呢,打出来是这个123是吧,哎呃可以啊,哎,那实际情况的话呢,打出来的还不是他。
18:06
对,咱们run一下啊。对,你会发现呢,它打出来的是这样的一个结构。对,打的是一个地址值是吧?诶这块呢,你要回忆一下,就咱们讲一维的时候呢,讲过这个内存结构啊,诶我们这儿呢,这是一维数组,它指向呢,你对空间的这个数组啦,然后它存的是个地址是吧。诶,所以这块我们在打他的时候呢,他并没有帮我们把123打出来啊,只是呢,把这个地址告诉我了,诶这个地址其实就是它指向了我说呢,是不是就这个结构的地址了。哎,对的啊,这个呢,是不是在堆里了。哎,只要是数组元素都在对立的啊。行,这个呢,就是这样。这个OK吧。这OK,好,这个完了以后呢,咱们不是还有别的吗。嗯,是不是还有这俩呀。这俩咱们也稍微的看一下啊。哎,这两个呢,稍微的难度就会又大一点了。诶,然后呢,诶这个测试咱们的AR3和这个AR4,诶大家看这块儿清不清楚啊,这个呢,我们如果去打印一下,这个先先别打印了,我先赋个值吧,这个A23我想给他的。
19:13
哎,这个元素你看负个值是不是可以啊零。一。可以吧?诶,比如说这个我叫Tom了。呃,相当于这个三四的话呢,大家可以这样去看了啊呃,大方向上来讲的话呢,这不是有一个两个三个元素是吧,三个元素里边呢,我们又有四个。这个四个的话,其实呃,严格上来讲呢,其实这块存在还是个地址哈,指向的是这块有四个。啊,这个呢,也存在是个地址指向的这块呢,这不是有四个。那这个一样是相当于有四个。哎,这四个,然后呢,咱们相当于给,呃,第一个里边再找这里边的第二个是不是这个位置啊。诶,我们复制为四,诶汤姆了。哎,就是这样一个道理。在其他这些位置呢。没负值是吧,对,那这个呢,就涉及到这个值是多少啊。
20:04
对,这个就咱们后边讲的第五个知识点了,哎,那其实呢,这个全是no。哎,他那全是no啊就行,好,这个你知道我们怎么去付了啊,这个付完以后的话,你这块再去打印,那自然而然的它就是Tom。哎,这就是汤姆啊,行,那这个没问题哈,呃,那这呢是针对AR3。啊,那刚才呢,也提到一下这个事儿,我要打印A23这个写个零是啥。哎,是个地质值。嗯,这个还是有点难度,一会儿呢,我们讲这个,呃,内存结构的时候呢,我们再来说一下这个事儿,大家呢会更清楚一点,我们先写到这儿啊,这个呢,就是你的地址了,你在这儿,然后呢,前面呢,就是我们这个数组的类型,呃类型呢是一个Java点浪包下的string这样类型啊,它这带了一个分号啊,呃,前面这块呢,这个L表示的是个引用数据类型的意思。啊,引用数据类型的意思啊,然后这个呢,表示的是一维数组嘛。你这不是这个,这不就个一位数组吗。
21:01
外层元素是吧,有些数组啊,这是它哈,那我们顺便呢,再稍微的搂一眼这个四哈。这个四啊,我说这个事儿更多。它呢,广指明了一下,这个外层有俩是吧。再往里边呢,是没有的。啊,没有的,没有的话呢,我们能不能给他整一个呢。你看哈,我这样写,大家看能不能看懂AR4我先写个零。就相当于外层的,是不是第一个元素。啊,然后这个元素呢,里边不是你没指定吗?没指定呢,你外层元素这毕竟是个数组嘛。我给你初始化一下。X吧,能看懂不?哎,那这时候其实是这样的哈,哎,这呢有一个元素,这不有俩吗。然后这个呢,就是我们说的这AR4的这个零是吧,现在是这AR4的一是吧,然后这个位置的话呢,你不是没有指向吗?我现在给你拗了一个有四个嘛。1234,然后呢,把这个地址呢,是不是给了你了。
22:01
那你就指过来了。那那既然呢,这块有了,你说这个位置,我们能不能给他去赋个值。可以,我现在想给他赋值怎么写?AR40。第一个位置是吧,哎,我就可以去赋个值了,比如那来一个1.0。那就可以了。行诶就是这块呢,大家可能理解起来会稍微有点难啊,如果能理解呢,最好不能理解没关系,咱们下边呢,还要讲它的一个内存结构,诶这不我们后边也都有这个图嘛,哎,待会儿说完之后呢,这个大家就彻底的就会清楚了。啊,就清楚了啊好,这呢是关于我们这个数组元素的一个调用。那接着的话呢,我们来看一下这个叫数组的长度啊,这个长度的话呢,咱们就以比如说这个数组为例。啊,以它来为例啊,咱们去做这个说明好,那么这个数组的话呢,诶为一个典型了,我们说只要是数组,诶,它就有一个属性叫点LA。OK,既然这个要清楚的话呢,那么我们看啊A点一下。
23:04
那你说我们这个输出结果应该是几呢?哎,是三呢。还是?啊,这有九个元素还是九呢。还是多少呢?是三啊啊,那你猜为什么是猜三呢。外边这一层的是吧,对其实这块呢,大家,呃,这个点的话呢,你可以往哪靠呢?哎,咱们上午在讲的时候呢,其实提过这样的事儿哈,其实没有所谓的这个多维数组。只不过呢,是一维数组里边又套了一个一维数组,我们叫二维数组了,那这块呢,我们其实来看这个A2呢,其实你就把它看成还是一个一维数组就可以了。只不过它的元素又是个异位数组而已。所以呢,你说我这个A2它的长度几,那就看你有几个元素呢,我不就仨嘛,是吧?诶所以呢,它的结果呢,其实是三啊来右键run一下。
24:00
哎,这呢,我们就看到了,哎,确实是这个3OK,好,那只不过的话呢,就是我们针对这个A2这个数组来讲,它的这个元素,比如说第一个元素,它呢还是一个数组,所以呢,它还可以调lengths。哎,那么进而的话呢,你第二个元素。哎,第三个元素啊,都是数组,所以呢,它们都有点LAS这个属性啊,那相对呢,这个呢,应该就三。三个是吧,那这个呢有两个,那这呢有四个是吧。在这样的一个特点。好,来,我们跑一下看看这个效果。哎,没问题。啊没问题,好,这个呢,我们就清楚呢,它到底是怎么回事了,就啊好,那么其他的这个数组结构呢,类似的啊,这个大家就清楚了,相当于你可以把它理解成就是考虑外层元素有几个,这呢是啊具体的嗯,某一个元素外层元素呢,它的里边的这个内层元素有几个,OK。行,那这个我们就说清楚了啊,这个清楚以后呢,我们下边看第四项说如何便利数组。
25:02
还以他为例。我现在呢,希望把这个数组的元素呢,哎,都给它遍历出来。来呈现一个这样的效果吧,比如123,然后呢A45,然后6789。哎,你看怎么做。哎,对,这时候我们说呢,得用这个嵌套循环了是吧。啊,你看怎么考虑呢,首先啊,咱们就先泛泛那样去说,咱们呢,要想打印出来每一个值呢,你得需要呢,把哎两个这个角标呢都得填上。那这个角标呢,它的范围呢,哎,我就这写个尾码了哈,是不是从零到二对吧。哎,这写零的时候呢,这里边可以写的就是012是不是有三个元素嘛,这个写一的时候呢,这能写零和一有俩元素,哎,这个呢,写二的时候呢。他能写这个1234,呃呃0123是不是四个元素是吧。对,就这样方式,我们去把每一个元素呢都哎显示出来啊行,那要这样的话呢,其实我们就可以呢,设置两个变量,一个呢叫一个叫接啊,我们需要呢,就是把这个ari接是吧。
26:13
诶把这个元素呢,给它打印出来就行了,那关键就是这个I的范围是多少,接的范围是多少,控制好就可以了。好,那首先的话呢,我们定一个变量。啊,这个我们叫I吧,这个I呢,来控制这个。啊,那就是从零开始到。三是吧,三的话呢,其实就是这个,哎,就是这个吧。哎,就是咱们ar2.les吧。就是外层有几个元素是吧。哎,这不就有123有几个算几个啊,这个我们就a2.lengths了,好,那那一层这个for呢,我就用这个接了啊接呢从零开始,关键就是接小于多少。嗯。这个的话呢,其实接呢,就是充当这个元素的。
27:01
哎,对于第一个外层元素来讲呢,有仨。那第二呢有俩啊,第三呢有四个,那这个还没法写成个常量是吧。那写成。这不正好是324你需要的这几个数吧,哎,所以我们就AR2I是吧,哎,点L一下就可以了。哎,这呢,不就是我们正好要的这个事儿吗。然后把它那打印一下是不就行。哎,体会一下啊,就是这个呢,是我们外层你看有几个啊,其实这块我们可以这样去处理,大家可能会更清楚一点,你看我这样放一下。哎,这个放这儿啊。那这个我就放这儿了。诶,这个你看我就这样来放了啊好你看啊,这时候呢,我是这样摆放了一下而已,那从外层来讲的话,一共仨元素,内层的话呢,每一行不一样,诶这边就回归到我们前面讲的嵌套for循环的时候呢,外层控制行数啊三行,这不就是你外层几个元素吗。
28:00
哎,那一层控制列数,列数呢,每一列的不一样,那么每一列有几个呢?我们就用它来控制。那就可以了。好,然后这个位置呢,咱们就不要让它换行了,诶我在这块呢,给它来一个制表符吧。诶,这个有几个空格,四个空格啊,然后呢,这一行输出完以后,我们在这儿呢,画一下行。然后呢,你在爱加加下一行。来看效果。嗯,看这就出来了。哎,就这样子的啊,哎,所以这块呢,我们说,哎这个二维数组使用的就是两层for循环。那前面呢,我们一位数组一层就行,二维数组两层三维数组呢。这三场呗。哎,以此类推啊就可以了,其实啊,其实呢,我们这个呢,就跟数组那跟这个呃,循环结构那块呢,其实有一个对应关系啊。好,那这块呢,大家呢,得自己下来呢,写一写啊,那么这样的话呢,我们关于二维数组,诶这四个知识点就完事了。
29:03
啊,四个知识点就完事了,跟我们一位数度一样啊,1234这四个事儿。好,那么接着的话呢,咱们看一下这个二维数组的另外两个知识点,那这块呢,应该算是,呃,咱们整个呢,讲数组这一章里边的,从知识点上来讲算是比较难的了。啊,那如果大家这块呢,不是特别熟呢,咱们可以先放一放也没关系啊,咱们这一章的重点呢,就是一维数组的六个知识点的使用,大家要会,后边呢,我们在讲这个三四的时候呢,就是通过一些算法呢,来体会一下一维数组平时在开发当中啊,是怎么应用的啊,那二维数组呢,这是我们也算是讲的这个新的知识点里边啊,这俩比较难来,我们先看第一个啊,说数组元素的默认初始化值。哎,咱讲一位数的时候呢,其实也讲过这个事儿了,哎,那一位数组呢,熟悉以后呢,我们接着来看这个二维数组的一个情况,哎,对应的代码呢,我们就在这块呢来进行测试了。好,那么这块测试的话呢,还是跟咱们讲异位数独啊,有一点是类似的,我们要是演示的话呢,就不太方便拿这样的数组去演示了。
30:05
你看哈,我粘过来这个叫A21吧,诶比如说我现在想看一下这个int型的二维速度,它的元素的默认出发值是多少,这肯定看不出来了。这个你要一打印是不是都显示的已经附上值了是吧,所以就没有办法去看一下默认值了,所以呢,咱们就不能够使用这种静态初始化了。但不能使用静态,那就使用动态了,那动态呢,咱们哎讲了两种方式,一种是这样的,一种呢是这样的。所以呢,我们这两种情况呢,就得分开来说一下。哎,先呢以啊这样的一种方式呢,看一看,然后呢,我们再看一下,只有前边这个没有后边这个呢,哎,行不行,大家不是行不行,就是是什么样的一种方式了,好回过来,哎,那么这个呢,同样的啊,咱们考虑一下诶是不是说也应该分成不同的类型呢。OK,没问题,咱们呢也考虑说,哎,分成这种这个不同的情况啊,嗯,这个呢,首先啊,我们看怎么去说啊。
31:01
对于这样的二维数组啊,最里边呢,这是一个in的形的,这呢,我先写成个三,谁先写成个二。呃,先呢,大家要能认可的一点就是它的所有的元素肯定的默认值都是一样的啊,我们只需要呢测一个其实就行。啊,那测这一个的话呢,我们其实要呃分成两种情况呢,第一种情况呢,就是说哎,我先考虑一下它的这个外层元素啊。诶,它的这个默认值是多少,然后呢,我再考虑它的这个内层元素。它的这个默认值是多少?啊,OK行,那就以这个结构,咱们先体会一下啊,它的这个外层元素呢,无外乎就是我们打印一下,这个叫A21随便你挑一个。啊,随便挑一个啊,或者我们这块呢,咱们再来一个啊,我再看看一。啊,这是呢,外层元素它的这个默认值,然后呢,内层元素呢,哎,我就这样啊A21这我写个零啊这呢我就挑一个零了。啊,这个我就以他这一个为代表了,去看一看。
32:00
那大家呢,猜一下啊,你觉得这块应该打印是什么?地址值是吗?啊,有的说是now是吧。OK,还有吗?哎,其实呢,不怕大家出错,就怕呢,你没什么想法是吧,呃,因为呢,比如你出错了,你一看哦正确是这样,反而呢,你这个一碰撞,你对这个正确的印象也很深刻,就怕你说哎,我完全就没有任何概念,或者说都已经有点懵了,所以怎么还有外层的,还有内层的懵了。这个事就麻烦了是吧,哎,现在你知道有外层和内层之说啊,然后这个内层呢。这就纯粹是到T这了是吧,哎,这个呢,是不是绝对是零啊,OK,那咱们测试一下。好看一下。哎,那么第一个也好,第二个也好,它呢其实都是地质值的,当然呢,地质之前呢,还保保留了当前你这个元素的类型。那这个元素呢,是不是外啊,外边来看呢,是二维的了啊,那具体的外层元素就是一维的了。
33:05
那意味着int类型的,然后呢,这是它的一个地址值。哎,所以这块呢,结果呢,就是地质值,注意不是nor哈。哎,闹呢表示是空的,它这呢是有东西的,它指向了不是一个一位数组吗。哎,所以它有东西啊,下边这个呢,也是指向了一个一位数组,所以它也有东西,所以它就有地址值,这个呢就是零。哎,就是这样的。感受感受啊行,那这个感受完了,哎,咱们接下来呢,我再去换一个例子来看,我来一个诶布尔类型吧。这个咱们见的比较少一些啊。好,然后这个位置呢,我就随意的写一个数了啊,一个三一个二啊,或者来个四吧,这都其实无所谓了,然后呢,我们看一看它的这个外层元素和内层元素。哎,有了上面这经验之后呢,来看一下,我打印一下这个AR20吧。
34:02
啊,其实我就打这一个就行啊。哎,然后呢,里边的AR2写个零,来一个一。哎,第一行咱看成第一行吧,哎,第二个列的这个元素。那这个是什么?对,还是这个低值值是吧,这个呢。来,我们跑一下。哎,你看确实如此啊,然后这个时候呢,你发现呢,这个地值值是它,然后前面这个呢,还是意为数独,这个呢,用的是Z啊说为什么用Z,这个不用问为什么了,或尔类型,它就是用的Z。这怎么不用B?But,还用be呢?BA给占用了是吧,诶所以这块我们就用这个Z来表示了啊好,那么这块呢,我们CTRLC啊,所以说白了就是这块打印的也是一个地址值,这呢是一个false。好,这个就说完了。然后呢,我们再举一个,比如说string吧。
35:02
哎,String类型的二维数组。哎,这个呢,咱们整一个四等个二啊,这个都还好啊好,那我打印一下这个外层元素,哎,这个我们还写个零了。是外层的。然后呢,那层。啊,这个AR3是吧,那那这呢。那是不是感觉还是地质值吧?然后这个呢。哎,这个呢,就是闹了。看一下。确实如此,是吧?哎,这呢跟我们刚才呢说的是一样的。好了,那通过我们刚才举的这样的三个例子啊,哎,我就不再接着去举了,哎,我们是二位数组,前提条件呢,是我们前边啊,后边这块啊,第一个位置呢,写了一个值,后边这个位置也写了一个值,相当于呢,比如说你外层有几个元素,内层有几个元素,这都是确定的,在这种情况下呢,我们说呀,这个外层元素。
36:02
它都是低脂值。啊,然后这个内层元素呢。那就看你对,就跟我们本身那个一维数组的时候呢,它的这个类型有关系了,你是波尔类型呢,就是false,整形呢就是零,不典型呢,0.0,哎这个饮水类型呢,就是no。想想是这个样子吧。啊,因为呢,你看怎么着呢,你是二维的嘛,咱们说呢,就以布尔为例吧,先呢,它是有我换那个数的哈,这不是有三个位置嘛。三个位置啊,然后呢,你每一个位置呢,是不是又指向了一个一位数组啊。所以呢,这不就有四个吗?每个都是如此。哎,这样的,那你想想你这块呢,都已经说了有四个了,这个数组都造好了,这个位置不就得存你这个一维数组的一个地址啊。所以他存的就是地址值。只不过呢,由于你这个一维数组这里边儿,你可能是int类型了,你可能是布尔类型了,所以呢,这个地址的话呢,我们看到它的类型可能会不一样。
37:05
诶这就是这样的点,好,那么回过来我们就可以呢,做这个总结了啊说对于动态初始化方式一这样子来讲的话,诶我们说它的这个,诶外层元素它呢,诶默认啊存储。哎,对我们这个,呃,就咱就泛泛来讲了啊,就是地址值了,呃,实际上呢,还保存了你这个元素的类型啊对默认的存储,嗯。我我就说要地值了,大家能明白这个意思啊,细节来讲的话,就存储你这个所谓的这个异位数组的类型和它的一个地值质量啊,然后呢,对于这个内层元素来讲。啊,这个呢,我们说默认与一为数组。啊,这个元素啊的这个类型啊,这个不同类型的默认值。啊,这个规定一致是吧,或者规定相同。啊,那就是我们前面讲到的这个,如果你要是整形怎么怎么着,哎,这个咱们对应的知识点这不都写到这儿了吗。
38:06
是吧,诶CTRL塞一下,我们可以把这个呢,再原封不动的再拿过来往这放。OK啊行,这个能理解是吧。这个是我们说这个外层啊,然后这呢是它的这个内层。好这个呢就说到这儿了,然后这个完了以后呢,我们再来看这个三啊3.2啊呃,动态初始化呢,还有一种这样的方式。哎,这样方式呢,跟上边这个呢,就不太一样了。看一下啊。这边我们接着说。嗯,我这呢,先来一堆星啊,分隔一下下边。这个呢是我们说的。啊,这个一。动态初始化。啊,初始化啊,这个方式一来说明。好,然后呢,把这个CTRLC。哎,放到这儿啊,诶方式二来进行说明,这个呢,咱们还是先体会一下啊,比如我还拿这个in的行的来举例。
39:05
那A2我们该四。哎,你有一个in字形的。啊,这呢,我们写了一个四啊这个写完之后的话呢,我们下边来看它的外层元素的默认值。然后呢,诶,那层元素的默认值。诶,这个内一直写错了是吧。成啊。嗯,OK。诶内层的哎,那么外层的话呢,还是直接打印AR4,诶整个零就行,那一层的话呢,诶跟前面一样啊AR4。这个呢,我写个零,这个呢,我也写个零吧。哎,这样的方式啊,先看这。大家觉得这个呢?对,要么呢,就跟上面一样,还是地址值。嗯,要不呢?Now。
40:00
好,这是一种情况,行,那这个先放着这儿呢。零。是吧,看有没有可能或者呢。啊,那行。那其实有点过分。是吧,它是in的类型的是吧。嗯,还有可能性吗?发错,哎,怎么就发错了呢。找不着是吧。嗯,OK啊行,来捋一下啦。呃,那这个两个里边呢,哪个你觉得可能性大呢。闹是吧?啊行,那咱们就直接来跑吧,走起啊。好,那这块可能有点迷糊了啊,这个闹呢,是不是这个闹嘛。这是这个啊,所以说这个闹呢,是这个。哎,也就是说这块呢,确实不是地质值就是no,而下边这块呢,在42行。这样呢,我们就报错了。哎,叫空指针的一个异常。哎,具体异常信息呢,咱们可以先不去研究啊,总之呢,就报错了先。
41:05
啊,报错了,行,这个看一看能不能理解。来,你看稍微的我们先画一下,一会儿呢,咱们就一画图,其实好多东西啊,大家就都清楚了啊现在的话呢,我们用了一个in的形数组,长度是四,诶我呢先用了一个长度是四的一个数组,这不就四个吗。问题呢,就在于你后边这个没有说。没有说呢,我就不知道该给你开辟几个IG呢,就没有开辟。没有开辟完了啊,这就是AR4,我就简写了啊,它呢指向了你造的这样一个数组,有四个啊,那这是我们所谓的叫外层元素了啊,有四个,但是里边呢,没指明。啊,没指明好,那么AR4呢,是有低脂值的。它指向了你这个数组,然后呢,你要是AR40,这就第一个位置啊,然后呢,进而呢,这就是A最后一个位置,这里边儿呢,什么也没放,所以呢,他们不就是闹吗。你为什么绕呢?这是数组啊。
42:01
数组是引用类型,引用类型的默认值呢?我们讲一位数的时候,不也说了no是吧?哎,所以呢,它就是now,所以这都是no。行,这个是no的情况下,你现在呢,还要找说我就找你第一个这个外层元素啊,里边呢,所谓的某一个数组里边的第一个元素了,我这都没有这个指向是吧。或者换句话呢,换句话说呢,如果要是有指向的话呢,这个有个地址指向这样一个新的一位数组,这就有指针,你现在没有这个数组就没有指针,所以呢叫空指针异常。诶,刚才我们看到这不叫non po,就没有指针,就说明你本身是个nu,哎,没有指针的情况下,你非要找它里边的元素就没有,那就是。一个异常。哎,这呢,就我们说的这样的场景。好,那么这个说完之后呢,诶大家你再想一下,如果我们换成其他的类型啊,随便呢,我们换一个类型。哎,你一个词锥类型的这个我们写一个,比如说五是吧,哎,那么它此时的这个外层和内层,你想想跟它一样不。
43:07
对,其实就一样了。哎,那你这个指向了是五个元素的外层了,哎,那你里边的没指明,那不还是no吗?然后这个呢,你根本就没有,这不还是报错吗。只不过现在我要运行的话呢,这个你看不到效果。对,这就涉及到我们程序啊,一旦你要是出现异常的时候呢,它就不往下走了,就啊。就跟人要生病的话呢,直接就躺平了是吧。后边就不要再去,呃,再去做事了啊。好,这时候我把上面给注入掉了啊,这时候你再看,这不就有个闹在这儿,然后呢,这在49行这块就报的错是吧。哎,这样个情况啊,行,这个呢,嗯,打开也行,那这个呢,我就诶把它呢,就先注释了,反正他也不执行嘛啊。行,那么通过这个的话呢,我们为代表的就把这个事儿呢,就说清楚了啊,说如果呢,你要初始化呢,是长这样的一个方式啊。诶,那么它的这个外层元素,我们说默认存储。纸。
44:02
那存储这个就是no。哎,那么下一个点它的这个内层元素。哎,内层元素,哎,我们说呢,它是不存在的是吧?哎如果调用啊会报错,这个报错信息呢,叫做none。Poer。Exception。Person啊OK,就是它啊叫空指针异常,这个咱们在这一章的最后的话呢,会给大家呢总结了异常一个是它还有我们见到叫数组角标越界的异常是吧?诶待会我们稍微的小结一下就可以了,好那么这样的话呢,我们关于这个二维数组的默认初始化值呢,我们就说清楚了。哎,这个你注意啊,咱们没有这样的结构啊。哎,其实这呢,也算是一种错误的写法了。那我放在这儿啊。怎么着写呢,你你你你别这么着啊说呢A21。哎,你有一个音字形的这么着是吧,说呢这个呢,哎,我们指定一个十,这是对的啊,你说我这个十不写这,我写这。
45:03
这不行是吧,呃,这个外层来讲呢,说有几个呢,还不知道呢,嗯,直接呢,就放到里边去写了,这是不行的啊,就是你有你爷爷了,你好歹你得有你爸了才能有你,你直接你爷爷这块直接就到你这儿了。那不行是吧,中间缺了一层哈。OK。这个呢,就是我们说的这个二维数组使用的这第五个知识点,诶我们就说完了。
我来说两句