00:00
好,那接着呢,我们来看这个后边的题啊,这个练习四还有一个叫练习五,先来看这个练习四这道题挺好的。啊,好像我这里边每道题是都挺好的啊嗯,看着这道题,这道题呢,主要来练的呢,叫对象数组,把咱们现在讲的对象和上一章讲的数组呢连在一起了,哎,我现在呢,不是一个单纯的对象呢,我这个数组呢,哎,是一个是一个student的类型的数组,那就意味着每一个元素都是student类型的。啊,也是先从情感上接收一下,接受一下。有的人又接受不了了,说,哎呀,从来没有见过student的,后边加个中号,今天就见了,哼,就是原来呢,你不是见过string型的数组吗?只不过现在不是s string呢,换成student呢?一回事啊,S string呢,是系统提供好的一个类,这呢,是我们自定义一个类,没什么区别,都是类。啊好,那我们来看下这道问题啊,这个题呢,需要大家下来呢,可以多写一写这个题,呃,复杂程度也好,练的知识点来也好啊,相对来讲多一些啊成,那这呢,我们来做这个问题,这个问题呢,我还是都写到一起吧,方便大家呢,回头找代码时候好找哈,要不这好几个呢,你找起来不太方便。
01:29
行这样啊,看一下这个咱们是作为这个测试类出现的啊,需要的话咱再定义别的上来的话呢,提到说定一个类叫student,包含三个属性,Number,学号,年龄,呃,年级成绩。没了,没有提说有什么方法啥的啊,没写没写,那就先写成这样,那下边呢,就具体的操作我们再再再说啊行,那首先呢,我们先class一下student。哎,大家呢,你注意,你看我拿到这道问题的一个解题思路啊,你需要也是强化这样一个过程啊,说上定一个类包含三个属性,类型也告诉我们了,名也告诉了,这就简单了,In特型的number in特型的state啊,特型的score,那这呢,尤其像这个number,你得最好标识一下啊,这叫学号。
02:26
年级。哎,这个呢叫成绩。啊,CTRL搞定,别的也没说,没说有方法,那就先空着不写了,接下来说创建20个学生对象。学号为一到20年级和成绩啊由随机数呢来指定,随机数呢,咱们也都讲过了,哎,这个呢,随机生成的是一个double部型的,哎,咱们呢,再给它转换成一个这个整形的啊,返回的是这是一个long型啊,咱们转换成整形的就咱们需要的int型。
03:09
前面咱们都用截断了,这时候你也可以用一下,这个叫四舍五入啊行,那接下来呢,他提到说让你创建对象了,那这呢就得做测试了啊,写一个main方法。哎,以前呢,咱们是就光拗了一个student,现在的话呢,我需要用20个student,那你你你这样写的话呢,STUDENT1你有一个student。这是一个,然后诶20个。啊。倒没说不行是吧,哎,那这时候呢,咱们就要想说,哎,能不能用一个结构呢,把它们都装起来,咱们数组不就是干这个事了吗。哎,就是把这个同一个类型的,还是表示的是同一个意思的啊,这都是学生了,哎都装起来好,那这咱肯定不会这样去写了,哎,那我们下边呢,就会去,哎声明一个,哎,Student类型的数组。
04:07
哎,那这呢,就这样写student,哎,是个数组,然后呢,你要S吧。这样写一下啊,简起来,然后等于new一个,嗯,Student,诶这样咱们呢,书读也讲过两种初始化方式,这时候呢,用哪种动态的合适。对,因为要静态这里边一个去用,那那太长了哈,而且呢,这还是一条属性赋值的情况,所以呢,动态先写上个20。哎,这呢,就是我们造了一个哎,Student的类型的一个数组,S是一个类,哎,我们回头呢,传的都是对象了,所以呢,就是这叫对象数组了,其实这个对象数组也不是咱们第一天见哈,咱们以前你写string,这不也算是叫对象数组吗?
05:01
就是这样,嗯,String的话呢,这不也是一个类类型的嘛,是吧,你给它赋的值,那不也是一个对象嘛,所以这也其实也已经也算是这个对象数组了啊,所以说呢,大家见他呢感觉很熟,一放到他呢就懵了,哎,确实有同学懵哈,其实没啥可懵的,你这是一个类类型,这也是一个类类型的一样。哎,咱们有讲过数组的元素可以是任何数据类型,当然包括我们自定义的类这个类型的啊,那么下面我要做的呢。就是给我们这个数组的元素赋值,这是站,这是堆,在站里边ST us,堆呢,用了一个数组,长度是20,此时每一个位置的值是多少?闹吧,哎,没有负个值,那接下来我们要做的事,是不是给每一个位置都得是new一个对象?哎,同时的话呢,你完这个对象这里边是不是都有属性啊。给这个属性呢,再赋值。
06:00
哎,就这样做啊,那每一个位置都你对象20个,那写起来比较繁琐了,当然用循环了。哎,在这里边进来以后,哎,我们调每一个位置,通过这样的一个循环的方式,给每一个位置呢,去你一个对象。这块能不能看得懂。哎,得等懂啊,这个呢是给相当于我们用数组的话来说呢,就是给数组元素赋值。通过一个循环的方式来负的啊,那么此时咱们一个循环下来以后,每一个对空间中的这个数组元素呢,倒确实是有值了,对,都有一个new了一个对象,哎,都扭了个对象啊,但是呢,这时候我们每一个对象的这个属性的值是不是都是这个默认的零啊对,那下边呢,再要做的事呢,就是给是不是每一个对象的这个属性再去复制了。
07:06
对的啊,那咱们其实可以在这里边顺便来做了,当你每哎给这个数组的元素赋个值,相当于呢,就是造了一个对象以后,然后我们下一步。啊,就是给这个student这个对象的属性赋值,哎,属性赋值这上面这不提了,说呢,这个这个这个学号一到20,好,那我们现在呢,给这个student I它的学号叫number。哎,负个值怎么写,I加一呗,I加一啊,你这I从零开始,第一个人呢,是一号是吧,I加个一啊,这个呢,你加个括号也可以,哎,然后呢,Students I给他的这个。
08:00
嗯,先是state吧,年级啊说这个年级的话呢,是一到。哎,在哪呢啊,没说一到几年级啊,他没说范围,那假设我们是小学生吧,数啊呃,对随机数,他没说咱随机的也得有一个范围嘛,假设呢,一到六,呃,123456,假设能不能取这六个数哈,呃,年级能取六个数,哎,那就相当于咱们这个要求这个年级哈,是在这个B括号的这个一到六这个范围,诶,又用到咱们这个随机数了哈,等于ma.random。它呢,先乘以一个几啊六减一是不是再加个一,哎,然后呢,这个结果呢,再加上一个一,嗯,这个时候呢,结果呢是一个double值,呃,Double的值呢,不能付给我们的int值,我们之前的做法是直接在这int了是吧?啊那我这个四舍五入就就不用了哈,哎,就是这时候强转是截段。
09:15
啊,你2.9也是二,你要想想二点九变成三,你就用下这个round也行,哎,对这个是小事啊,这样的话呢,我就给这个年级也附上了接下来成绩,成绩呢,是可以考零分的,到100分这个范围好。点啊score等于还是这个意思啊,点RHYTHM,然后乘以一个100啊,100减零了,再加上一个1N啊对,加个一,然后这呢,再加上个零,那就别加了。嗯,这样的一个结果,再给它做一个int的转换,这个呢,虽然后边没有加一,但也要给它加个括号。
10:08
行能看懂是吧,成这样的话呢,我们就给数组的元素赋值,元素的属性赋值就搞定了,哎这就搞定了,搞定以后下边呢,就是只是呢,咱们现在把这个事儿呢,先做好了哈,下边呢,它有具体的这个需求了,呃,提到了两个问题啊,说第一个问题呢,说你打印一下这个三年级的学生信息。诶,打印一下三年级的学生信息,那都有了以后呢,下边下边咱们打印之前呢,咱们先看一看吧,我们比如说叫遍历一下啊,咱们的学生数组。啊,遍历一下血中数组遍历的话呢,咱们这样写啊,For in特尔点零,I小于。点Les,哎,加加好,然后我们直接在这去输出一下是吧,来输出ssi,那这个时候你想想啊,我要是去输出的话呢,这时候会输出什么呢。
11:16
来跑一下啊,走OK,诶看一下。20个地址值能理解为啥是地址值吧,对,它现在是一个对象,咱们说这种引用类型的变量里边,哎,已经说过几次了啊,不是no,它就存地址。对吧,哎,因为这时候咱们不是拗过对象了嘛,你有过对象了,说明他就不是闹了,那不是闹它就是地址呗,就是我们,哎,这是占,这是对占这里边呢叫sts指向了我们堆空间中你造的这20个对象,然后每一个对象呢,咱们都给它拗了把这个首地址值是不是就给的是它呀。
12:06
对,咱们现在打印的就是这个地址值啊,所以是地址值呢很正常,那如果说我们希望它显示的是这个学生的这个三个基本信息,你可以直接在这呢,是不是去点一下调呀,点一下这个number,然后呢,你再给他配一下啊,哎,再去点一下它这个叫state。哎,再点下它这个叫score稍微有点长,你这个呢,可以这样给他换下行也行啊,哎,这个时候呢,我们再执行OK。哎,这不就出来了,反正就稍微丑点,哎,这是他的这个叫学号啊,这不是就是一到20嘛,这是他的这个年级啊,我们是一到六啊,这是他的这个成绩后边这样,哎这样啊,那这是一种操作哈,还可以怎么着呢,还可以大家在这个位置呢,咱们写一个方法呀,哎,我们叫显示学生诶信息的这个方法,哎咱们这儿呢,比如说直接我就public,哎这个时候呢,你返不返回其实都都行,看你自己了。
13:27
哎,我要是写返回,我就写个string,哎,我这叫infer,这里边我这样写,别别out了啊,直接return return说学号,哎,加上number,这不就是方法里边调属性而已。这个年级。啊,这个成绩。
14:00
好,这不就写好了,写好以后咱们呢,在这个位置呢,我就用不着这样去写了。哎,咱们呢,哎这边我就再演示一下这种操作啊,我在这个c out里边直接呢调一下叫哎students,哎哎这呢就具体这个学生了,我调他的这个叫诶infer方法返回呢是个字符串,诶咱们C的print line这里边其实仍然是一个字符串,编译器看到的不是一个方法,他看到就是你的返回值,哎所以说可以把这个方法写到这儿啊来跑一下,哎这不就这样了。好,这是咱们到目前为止能做的这样的一个情况啊,就这样了啊,然后接下来呢,我们来满足它下边这个需求。CTRLC下。哎,说问题一,打印出三年级的学生信息。
15:01
来来操作一下,其实这个也是便利对吧,咱们呢,就写一个for循环。然后在这里边,那就if呗,如果students这个数组的每一个元素,看看谁的state是三,哎,我们呢就把它输出对吧?哎,那输出的话呢,是不是就还是这个事啊。就这样呗。哎,这样啊,然后咱们上面因为输出过,所以我这儿呢,加一个换行啊。哎,这个这样,这个不是人家需要咱做的,咱们只是顺便看了看执行一下,哎,上面呢,有三年级的啊,有一个两个啊三个是吧,正好这三个。哎,这是因为我们负的是随机数,所以在运行的话呢,可能会有变化。
16:00
哎,有点巧啊,那都是三个啊哎,绝了啊嗯,一共咱们是造了20个人,咱们是一到六除一下的话呢,大概也就是三点多,平均的话是吧,嗯,差不多也就是这呢,属于这个出现的概率比较高的啊,这个概率就很低的是吧?啊这一个了哈,行,这是咱们说的这个第一道问题啊,就解决了啊解决啊然后看一下这个问题。问题二说使用冒泡排序,按学生的成绩呢排序啊,并且去便利所有的学生信息,就排完序以后你便利一下啊,那下边就涉及到这个冒泡了,哎,冒泡呢,你说哎呀这个有点懵,其实没啥对,原来的咱们造的是个in型的数组,你会写,现在呢,只不过变成student,你比的是它里边的这个属性而已。
17:13
对成绩的属性而已啊,一样来吧,写一写啊,In的I等于零,I呢小于嗯,Students这个速度点LAS减个一,哎,加加。哎,再进去再来一个for in个J等于零,接呢小于。点N减一减I接加加好,关键是里边啊说一旦发现s sus它的接的score,哎对,如果是大于从小到大哈,哎是大大于别等于了这个接加一这个位置的score,对就是student,它没法比大小,人家就是存在俩地址,你咋比大小呢?是比较他们内部的成绩啊,那一旦发现这种情况,我们去交换的是谁呢?交换的是成绩吗?交换的不是成绩,交换的是不是你这个位置的这个对象呀,这个要注意啊,千万不要这样写了,把这俩这个成绩score来回换了,那错了就啊诶咱们呢得先去声明一个临时变量,哎。
18:35
这个我们叫student,这个呢是借。JJ加1J加一,这呢是我们的tap能看懂吧,这个我明确说一下啊,说如果需要换续啊,交换的是这个student啊,交换的是这个数组中的数组的元素。
19:10
对,这个元素呢,就是你这个student对象啊,加个叹号啊,不能是去交换成绩了,那成了啥呢?这个张三还在这,李四还在这,你把人俩成绩给换了是吧,那不成作弊了吗?是吧?哎,你把这俩整个这个人换掉啊,成这样的话呢,咱们就换了,画完以后的话呢,让你再遍历一下,这个咱们遍历呢,刚才也写过了,那这个操作呢,CTRLC一下,哎,咱们放到这个位置上,这。这个呢,我就哎这个CTRLD一下删掉了,哎这就又变利了一下,好看一看效果OK诶咱们最开始的时候呢,这个成绩呢,只是随机生成的,所以大小顺序呢是乱的啊,然后咱们排完序以后,诶啊还有零分的啊哎这个时候呢,你看他就按照这个成绩呢,从低到高的顺序呢去涨的,哎这就是一个正确的情况。
20:13
啊,那这一题呢,按说到这其实就算是结束了啊,其实写成这样就OK了。
我来说两句