00:00
那包装类呢,最后还有一个题目,这个题目的话呢,就是主要呢,通过它来体会一下我们在使用这个包装类,或者说我们为什么要用这个包装类,就是因为的话呢,我们有一些方法的行参呢,就是一个object,你要把这个int呀,基本数据类型啊往这放,放不进去,所以呢,我们必须呢,要给它以包装类的方式才能往里放啊,同时的话呢,我们这个能放进去的,在取出来的时候,你是一个对象,想求这种所谓的最大最小啊,还得把它转化为基本数据类型,所以这个题目的话呢,其实还是挺好的啊,来,我把它的CTRLCL一下,咱们呢来写一写。那我们再去新建一个包,关于这个练习,这我写一个四。关于这个学生成绩的一个测试。这个题目的话呢,我粘过来以后,咱们呢,稍微读一下,你会发现呢,这个题有点眼熟。
01:01
这这稍微有点不太好看了,把这个往下整一下看一下,这呢提到说利用vector,这个VE的话呢,实际上是我们后边讲集合时候呢用到的一个类,但是现在呢,我们这个直接用一下也行啊,你就虽然没有讲过,但是呢你也不用怕,像这个高中的时候呢,专门有一类高考题呢,就是叫信息给予题。就是跟你说一个可能大学中的一个知识,比如说微积分,那高中呢没有讲过,那他这块呢,就把这个题面呢,这个信息呢先给予你,然后你根据这个信息呢去做题,所以这个呢,大家也可以当成是一个信息给予题,Vect呢,我们后边讲现在没有讲过,但是呢,他把这个vect能够用的东西呢,下边都给你说清楚了,其实呢,也可以考虑呢,去做一做看一下,说利用VE呢替代数组处理处理什么呢?从键盘读入学生成绩用负数呢来表示结束了。找出呢最高分,并输出学生成绩的等级,咱们前边呢讲数组的时候呢,做过这道题,有的同学呢,就是形式上的画一下,可能已经不记不清楚了,其实啊找一下数组,找到课件,这是一个一位数组的问题,看这个题,那这时候记忆呢就瞬间就唤醒了,当时呢咱们是这样做的,从键盘呢读入学生的人数前,我根据这个人数呢造一个数组,然后接着呢我们去遍历这个数组,每取一个数组元素,我就调一下next in的方法,把这个数组的值呢就都附上了,然后呢接下来找一下最高分,然后就跟最高分的一个差值确定每个学生的等级。
02:46
当时咱们是用的数组做的,现在一看这个题是不是非常简单,很迷茫啊,按说应该简单了是吧,就大家呢,这也学了这个十几天了,这个认知能力其实应该是有所提升了,那这道题的话呢,我们是用数组做的,现在呢,回过来这呢,让你用vector呢去替换,就是替换这个数组的,那关于这个好处的话呢,咱们看一下就行,说数组呢,一旦创建长度呢,就固定不变了,所以在创建数组的时候呢,必须要知道它的长度,就是咱们这个之前讲的时候呢,必须呢,你要输入一个值,这个值呢用来确定咱们数组的长度,而现在的话呢,我们使用这个结构叫vector,它就不用了。
03:29
就是你想往里放几个就放几个,不用一开始告诉我长度是多少,这也是我们使用集合的一个原因啊,那么这个V呢,是一个累了,我们要想用得用它的对象怎么着,就这样已经告诉你了。那这是创建它的一个对象,我往它这里边呢去放元素,它呢就像是一个容器一样,数组呢也是一个容器,那往里边放元素呢,调的方法叫爱的element,你只需要往里边扔元素就行了,但是呢,它只有一个方法,只能往里扔对象。
04:02
那咱们现在输入的都是学生成绩,咱们用的方法还是叫next int,你得到的是一个基本数据类型,那现在呢,咱要求你放进去的都是对象,这就涉及到你必须把基本数据类型转化为对应的包装类的对象。啊,这是往里放,往往里放,放进去了,然后我还可以往外取,取的时候呢,它返回的也是一个object类型的,就是返回的取出来的数据呢,他认为一个一个的都是对象,那咱们下边呢,还得需要这个求这些最高分,包括呢,跟最高分的一个差值,这个都得需要去比较大小了,那你拿这个对象去比较大小是没有意义的。对象是一般呢是不会比较他们的大小的,咱们只会比较他们等等还是不等啊,那么要想比较大小,我还得把这个成绩再从呢转化为int啊,这就涉及到一个是提升,一个是往下降,行这呢就咱们这道问题好,首先呢,咱们写一下这个解题的一个步骤啊,首先第一步这呢既然涉及到获取学生成绩了,还得使用scanner。
05:14
所以第一步呢,我们去相当于是实例化咱们这个scanner,然后用于从键盘获取学生成绩。这是第一步了,第一步有了以后。咱们呢,相较于原来用数组那个写法呢,咱们就不用呢再去获取一个数组的长度了,现在呢,咱们用的是这个vector,就不用再去拿这个长度了,它就直接往里放就完了,所以第二步呢,咱们相当于叫实例化,或者叫创建vector对象,这都给你写好了。造好一个容器,相当于原来的数组行有了它了,那第三步是什么呀?是不是该往里放元素了,放元素的话呢,咱们放的不止一个了,不止一个呢,放很多个,但是又没有说放几个,它是以这个负数呢表示结束的,那我们这时候呢,得写一个循环,那循环的话呢,是不是要么写V处,要么呢,是不是就得是写这样的结构了,哎,通过循环的方式。
06:21
通过这个循环或呢,大家写这个while循环这样的方式,这个给呃给给我们这个vector中这个添加数据,添加数据就是你写个for循环,然后添加数据这个事的话呢,用的是具体的这个方法,那你这个位置呢,每一个都是你调的那个next in的方法。行,这是往里添加了,那添加添加,然后这里边儿呢,终止条件就是当你输入是负数的时候呢,我们相当于就跳出这个循环了,这个我们算是一个里边的具体细节的一个步骤了,或者我们这样写3.1 3.1的话呢,先把这个是放在这这呢是叫一个添加操作。
07:09
应该是它,然后的话呢,这个3.2就是当输入是负数时,这个跳出循环。跳出循环,好,那么通过这个循环的话呢,我们就把这个成绩呢,都给附上了,下一步该干什么了,下一步下一步对我们需要把这个最大值呢给获取到,获取学生成绩的最大值行,最大值呢拿到了,然后再下一步呢,就是通过便利的方式呢,我们拿到每一个学生的成绩和这个最大成绩呢,是不是做一个比较,得出每个人的等级啊对,这就便利。
08:00
便利,我们的这个叫vector,然后呢,得到每个学生的成绩。哎,然后呢,并于这个最大成绩。比较得到每个学生的等级,诶CTRL一下,这是不是就我们整个这个题目的一个思路呀。哎,就这样的情况啊好,那咱们下边呢,就开始一步一步呢,开始去写一下,首先我们呢,需要实例化scanner,这个咱们有一段时间没有用了。哎,Scanner system in。好,嗯,这个放在后边ctrl shift o一下,这是导包的情况,接下来的话呢,我们不用去获取这个,呃,原来这个数组的长度了,呃,咱们这呢,直接往这里边放就行了,所以呢,就省掉这个过程了,那接下来的话呢,这呢需要你去创建这个vector的一个对象,这个都给你写好了,直接呢,你就CTRLC这个对象呢,就造完,造完以后先ctrl shift o一下到包。
09:13
做完以后呢,我们下边呢,就写这个for循环,然后这样的一个方式,或者你用这个wow也行,进来以后的话呢,我们先得获取一下学生的成绩,这里边呢,我们可以每次都让他输出一点,输出一句话说,请输入学生成绩这个小括号,说当输入是负数的时候呢,表示结束。诶,就这么一个情况,那么这里边儿呢,我们就得用这个scanner调next in的方法得到呢学生的成绩。这呢我写一个叫score成绩呢,就得到了,得到成绩以后,接下来的话呢,我们是不是需要把这个成绩呢,添加到咱们的这个,哎,Vector当中啊加这时候加的时候呢,你就得小心一点了,这里边我们就得提一下,在JDK5.0之前怎么办呢?我们现在你想V点,咱们去调一下,这叫ADD element,它只有一个呢,行参式object类型的一个方法,我需要呢传一个对象,但是咱们现在有的可不是对象。
10:21
那这那在这个JDK5.0之前怎么办呀?先是不是转化为一个integer啊,哎,我这叫NSC吧,等于new一个integer,把这个score呢扔进去,得到一个inte的对象,这个对象可以扔进去吧,可以了,这是不是一个多肽啊,没问题,我这呢就一个一个给它扔进去了,放进去了这呢是我们说之前的一种添加方式啊,但是这时候回过来一看哟,好像有点冲动了,因为这里边还考虑到是个负数了,所以说你在这个往里边扔之前呢,是不是先来判断一下这个score靠不靠谱啊,所以在这个位置我们先判断一下,说如果咱们这个score呢,你是一个小于零的,小于零意味着我们这个不再往里去添加成绩了,Break一下呗。
11:16
这就这个问题。这个我们得给大家写到这个上面了,那这是它小于零的这个情况,那要是走到这儿呢,意味着它就是大于零了,大于等于零了,那大于等于零的话呢,你也可以额外的再去给他判断一下,说你这个score呢,如果你要是大于100分这个呢,也认为它是一个非法的数据了,咱们也可以输出一下,说输入的这个数据呢,非法说请重新输入。请重新输入,那这写一个重新输入的话呢,我把这个下边逻辑还写到这了,怎么办?写一个肯定就可以吧。对吧。
12:00
理解是吧,嗯,行,就是如果呢,我们小于零是这样的,如果你要是这么着的话呢,这个就直接我们让它接着下一次循环,不让它往这走了,能走到这儿呢,意味着它一定是零到100之间的,那我们呢,就这个给它呢封装一下,然后添加到这里边。行,就是你要是不愿意比100大一百的,你把它删掉也可以啊好,那我们就把这个成绩呢,给它添加进去了,那接下来的话呢,我们需要呢,获取这个学生成绩的最大值,咱们讲数字的时候也说过,这个操作呢,是不是可以放里边啊。就是我们每次这个你从键盘获取到一个学生成绩的时候呢,我们这时候呢,就跟你现有的这个所谓的最高分呢比较一下,所以我们把前边先定义好一个啊int型的叫max score,这个我就先写个零了,因为成绩呢本身都大于等于零,先写个这个最小的,然后呢,我们在这里边判断说,如果这个max score发现它呢,是小于我们当前拿到的这个score。
13:08
这个时候呢,我们一定要注意拿的是基本数据类型比的,别拿这个对象去比,对象呢不能比较大小了,那如果呢,你发现它小于它,就重以附值。诶,这是不是就搞定了,那么关于整个负值以及呢,我们去求这个最大值的操作呢,就是结束了。哎,就结束了,那这里边的话呢,咱们说的是5.0之前呢,是这样写的,那5.0之后的话呢,那就直接那就直接扔了就。我呢直接调这个v.I的element这个方法CTRLC一下是不是直接把这个SC就扔进去了,诶这就没有问题了,他也不报错,这呢实际上是一个自动装箱。行,那么这两个操作呢,我就光测试它了,这个肯定是没有问题的,那把这个成绩呢,也装进去了,最大成绩也获取到了,下一步我们呢,需要去遍历vector,把咱们每个学生成绩呢都取出来,然后接着呢跟最大值呢做一个比较,写一个for循环,Int I等于零,哎,小于小于,这时候呢,原来是数组的长度,现在的话呢,叫v.S。
14:25
这呢,获取的就是你里边到底存了几个元素的意思啊,然后呢,哎,佳佳。下面下面的话呢,我们需要取出来每一个元素,取的话呢,用的是这个方法叫element at,这呢就是你的索引。你看这个叫信息给予题,把这个呢都给到你了,我们呢就取到了每一个元素,哎,这个不能写零了,写A取到了每一个元素,因为咱们往里放的时候呢,我认为你是一个object类型,所以取的时候呢,它自然也认为你是一个object类型的了。
15:02
那object类型倒还好,但是关键呢,就是咱们现在需要你去比较他们的差值了,那你这种对象是不是也没办法说比较,说减时跟谁比他也减不了啊,所以这时候呢,是不是就得给它拆下来啊,对,转化为基本数据就行了,这呢我们再说一下在JDK5.0之前,之前怎么整啊,你得先变成一个ger吧。这个我还叫这个in scar没有问题,往OB接一下,前边做一个强转。行强转了,强转完以后,这时候呢,它能比较大小吗。还是不可以的,所以我们还得是给它再转化成是一个具体的score基本数类型才行,这个怎么转来着,是不是拿它呢,有一个叫什么呀,Int value啊,哎,我呢就把它转化成一个叫基本数据类型了,只有把它转化为这个基本数据类型以后,咱们下边呢,才可以让它去比较大小,所以下边的话呢,我们就这样写了,说如果咱们的叫max score减去咱们的这个score,发现呢,你是,嗯,减去它以后是小于等于十是吧,在这个十分以内呢,我们给个等级A,这个等级的话呢,咱们还是提前定一个叫一个level。
16:32
Level,这个我就没给大家赋值,这俩叫level。这呢是一个A档。Else,衣服?那这呢是一个B档。再来一个。30分以内,这是一个C档,好,Else直接呢就是一个D档。
17:04
这样子,这是有个D档行,那通过这样的一个循环呢,我们就把每一个学生的成绩呢,以及他呃,每个学生的等级呢,就都获取到了,获取到以后呢,紧接着我们在这里边儿呢,就做一个输出。这个输出输出的话呢,我们可以跟原来用数组这块呢一样,也可以呢,输出这样的一个形式了,那我们就这样写了说student。这个我们来个杠吧,然后呢,加上一个I,它的score is成绩是加上成绩是多少,这个我们就用一下这个可以用这个score啊,然后逗号它的等级等级这用的叫gradeid了意思。哎,这个我们用一个level,或者说你这个叫level也行啊,这个都都提这个变量,那就都叫level吧。哎,加上我们这个具体的Y6值,呃,这个Y6值大家你会发现呢,我们这个Y6这块呢,上面你看我这没有赋值在这呢,有没有报错。
18:09
为啥呀?对,因为我这里边呢,肯定会复值了,肯定会复值进来,哎,既然肯定会复值了,它就一定会有个值,所以就不用担心这样问题了,上面呢,就没有必要一开始非得给他负一个数了,当然你要负一个也不错,我这写个零也可以是吧,你要写的话呢,你也写个零啊,就别写别的了。行,这个负不负呢,其实都可以行,那这里边呢,我们在这儿呢,就体会到了,咱们这儿要想这个比较大小,那只能是用一个int型,那现在的话呢,是不是也可以考虑直接就给它拆箱着用啊。DDK5.0之后之后的话呢,咱们这个score,其实这呢,就。那就别告了我,直接这个位置写obj可以吧?写OB接看CTRL先,我我还先放到这儿啊,你看这是不是报错了这个对象呢,这样有点太猛了,就是这个装拆的拆的有点太过分了,就是拆箱呢,咱们是主要针对的是这个包装类和它对应的基本数据类型,你现在直接从我这块去拆,是不是拆的有点太过了,那你怎么办?稍微柔和一点呗。
19:21
那你这块呢,就先一个scar,我呢这样拆呢,是不是就可以了。这个拆了其实也也也够猛了。按说呢,你先拆成inte,再直接拆这块,我直接就写个in也可以,哎,这个也可以的,行,这呢我们就可以去比较了,然后这个呢也用的score,行这个题目的话呢,就写完了测试一下。请输入学生的成绩,这个我们就开始写几个成绩了。好,这呢,我们输入一个负九结束12345,输入个五个人等级就出来了,这写的准不应该是准的是吧?但现在看来好像这个差距有点大,98跟这个对差的可能有点大了啊,应该没有问题了,行这呢就是我们这道问题,然后大家呢,可以考虑去写一写这道题的一个意义所在呢,就是让大家去体会一下,我们为什么要讲包装类,就是因为咱们有些方法呢,行参它就是一个这个类类型的,那你基本数据类型呢,也得能往里放,知道va你不是面向对象吗?你凭啥把这个基本数类型给人扔出去啊,所以呢,我们才定义了包装类了啊,那能够变成包装类,你也得能够返回回来啊,也得能够给它再降下去,要不这个加减乘除呢,又用不了了,所以呢,就是一个升一个降啊。
我来说两句