00:00
行,那接着呢,我们来看一下这个,呃,下边一个练习二啊实验二。嗯,这个实验二的话呢,比这个实验一呢就更难一些了,这里边涉及到这个内容呢,就更丰富,哎,除了我们这个account之外呢,Account和customer之外呢,还涉及到一个银行,这个银行的话呢,它又可以存多个客户,这呢就会出现一个客户构成的数组,诶这个题目呢就更难一些了,诶我们写一下,首先呢是关于这个账户啊,这个账户呢难度其实不大啊,这样的话呢,我们也是啊,为了能够看的清楚啊,我们就把它这样子一下,主要呢,咱们看这个UMR这个类图啊,把这个结果我们缩小一下。首先我们先来去创建这样的几个类,啊这呢又一道题,我这呢再去新建一个包,诶这个叫四,哎,这里面创建这样的几个类,首先是account。
01:09
哎,你顺便也可以先都把他们生理好也行啊,接着是我们的customer,在下边我们的银行bank。好做好了,然后一个一个来啊这些呢,我们暂时都先关掉,然后就光把这几个打开。好双击一下,好先看看啊。行,首先啊,这块呢,提到对应的这个属性UML这个类图呢,这个结构咱们已经讲过了啊,应该可以看得懂了,诶大部分类型的。Balance,然后构造器,哎,Public count哎,Double,哎这个名呢,稍微不太一样啊in哎,Balance哎,它让这样定义,咱们就这样定义,然后接下来就是做一个赋值啊z.balance等于啊in,好的斜杠。
02:10
啊,In balance,好,这是这个构造器啊,下面呢,关于这个属性呢,有一个get方法啊啊,那就再手写一下吧,Get double啊get这个balance这样啊,我们return一下啊,Balance行,然后再接着呢,Deit就是存钱取钱啊这样的操作,哎,咱们刚才呢写的跟这个类似了,这呢他也没有说明,那就是一个wide的啊deposit,这是存钱double AMT啊这呢你可以标识一下啊,这是存钱操作啊。存钱判断一下我们的AMT,哎,它是大于零的,哎,那我就balance,哎加等于我们的AMT。
03:08
嗯,这块倒也没有特意的说是存没存成功是吧,我们写上一句吧,说存钱成功。好,这就OK了啊,下面一个取钱操作。Public VO叫withdraw。哎,取多少钱,行参指明。啊,这呢,跟咱们刚才的这个判断方式呢,其实类似了,就啊说呢,如果我们的balance。这个余额哎,大于等于AMT,哎,这呢就可以取balance,就冲减一下。嗯,简短于这个AMT啊,减完以后呢,这块我们也可以说一句话啊,说这取钱成功。
04:04
啊,曲线成功好这个位置呢。嗯,你也可以呢,就不写return呢,这个那你就这样写个else,这样二选一,或者你要这写个return呢,这个就不用加else了,下边再接着写啊这块呢,就是取钱失败或者叫余额不足。哎,这样一个情况啊,行,那这呢是关于这个取钱操作,这个写完以后,我们这个account呢就搞定了。嗯,然后接下来customer。那在这啊,跟咱们刚才写的呢,其实类似的,来这呢,我就快速的写一下啊,String类型first name。然后account类型的account。行,下面呢,有个构造器将我们这两个属性初始化,跟刚才也是一样的,这呢叫FNL啊,那我这我就直接调一下吧,构造器啊,这个看的不用把它上边两张初始化一下,这个super呢,没见过,大家先干掉啊,它这个叫F,那就F吧,这个是L,这个L,哎,大家呢,严格按照人家这个题面的这要求来啊成,那接着关于我们这个first nameme lastname,还有这个count,那这个跟刚才那会儿也都完全一样啊。
05:26
哎,我们再去调,哎,它呢盖塞都有这个呢,光有盖这个也一样。那这样啊,然后OK,行,这个类搞定了。啊,这个类就写完了。然后再接着难点呢,是在我们这个bank这块啊,这个呢叫银行啊保存一下在这那银行呢,声明了这样的几个属性,首先private customer类型的数组。可以呢,来存放多个客户,可以存放多个客户的这个数组。
06:07
啊,这是它,然后再接着呢,有一个private int类型叫number of customers,诶这个变量呢,是用来干什么的呢。哎,Number of customers就是客户的个数是吧,所以用它呢,我们说来记录,哎客户的个数,注意客户的个数和我们数组的长度是一个事儿,不不是是吧,比如咱们这个银行的这个,我们造这个数组,数组呢,你比如说造了长度是十对,就意味着说你这个银行这个,呃,体系里边啊,我们这个某一个银行里边,它最多呢,是可以有十个客户的。但是实际上呢,他可能就只有两个客户在这办理业务了,哎,那我们这个number of customers实际上记录的是这个二啊,后边那八个空的空的就不算。
07:04
或者就相当于饭店,饭店呢就是实际上能坐十桌,但实际上呢只有两桌人吃饭,那我们这个呢,记录的就是你这个两桌人,而不是说你的这个容量是十啊,容量呢是由这个数组的长度来衡量啊,行,那么这呢是咱们这个叫属性啊,都没有初始化,接着呢写构造器public bank。啊,这里构造器,构造器这块呢,也没有特意的提关于构造器的事儿,那咱们呢,就先暂时呢放着。啊放着啊,下面下面的话呢,提到了这样几个方法,第一个爱的customer public。嗯,然后这块呢,指明死锥形的。啊,这个F啊,四针形的L。诶,这个一看这个名呢,也知道这个意思了啊对,就是将啊,或者就直接简单写啊,叫添加客户了。
08:02
诶,你添加这个客户的F跟L是什么呢?对,就是我们这个客户是不是都有姓跟名啊,诶对,就是这个姓这个名的这样的一个客户啊,嗯,咱们先把这个方法的这个声明先写出来啊,然后public下一个int类型叫get number of,哎,Customers没有参数,哎这个呢叫做获取这个客户的个数啊行,再接着。哎,Public返回值呢,叫customer,叫get customer int型的index。嗯,获取指定这个位置上的一个客户。诶这个意思啊,获取指定位置上的一个客户行,你看这块具体的话呢,这块这不也有这个描述吗?就是咱们刚才说的这几个事情。
09:06
行,那下面的话呢,我们就一个一个来写了,先看第一个叫I的customer,这呢也有说明说呢,呃,依照这个参数呢,你去呢,构建一个新的customer对象,然后呢,把它放到我们的customer这个数组当中,嗯,你放到数组里边,你存了一个人,记着呢,把这个number呢改一下啊,Number of customer这个O,这个O是大写的啊,记着把你这个属性的值增加一个一。没了行,那咱们就看看怎么写啊,嗯,这是咱们刚才这个客户这个我这样这样这样放一下,有的同学呢,就是写着这个就忘了这个了啊,这样你就不都能看着了。我现在呢,要去造一个客户了,这个客户呢,构造器这不都写好了,长这样子,所以我们进来呢先哎,Customer customer等于new一个customer,它这个FL这不都扔进去吗。
10:05
呃,先根据提供的这个姓名,先造一个客户。那造完这个客户以后呢,你是不是得加到我们这个数组当中了,行,那这个数组咱们呢,要是第一次加你这块呢,就得写零。对吧,你要是第二次加呢,就得写一,第三次呢就得写二,那你说我这个位置写谁啊,首先的话呢,你你不可能写死一个数对吧?哎,得写成一个变量了,这个变量呢,对每次掉呢,它得还得累积正好呢,它就满足。哎,我们要是首次掉,正好你这个默认值不就是零吗?哎,我们呢,哎,就把它呢复成咱们的这个cost。对,敷完以后呢,你这个变量对加加一下。这个时候呢,你要再掉,这不是角标就变成一了嘛,再加加再掉角标就变成二了,诶正好满足我们这个情况,那同时同时当我们第一次掉的时候呢,哎,我们这个加加完了以后,诶正好你掉了一次,我这个值呢也是一,诶你掉第二次呢,我这个值加以后变成二呢,你掉第三次呢,我就变成三了。
11:23
哎,那他正好是不是也可以用来刻画咱们这个客户的个数了,哎正好是吧,哎就是用它呢,诶来刻画最合适啊,那这两行代码呢,大家这样写也行,或者呢,是不是也可以给它合并一下。或者怎么写?是前加加还是后加加,哎,是不是得后加加了。我那第一次掉先拿零是吧,先去这个操作,操作完以后呢,自己大家加加一下,哎,所以也可以合成这一个啊,这个有没有疑问看看。
12:02
没有没有号接着按。说获取客户的个数。获取客户的个数呢,正好我们这个变量衡量的不就是客户个数吗?直接呢就return它就完事。这就搞定了。啊,再接着获取指定索引位置上的客户啊同学直接就return找我们这个卡,嗯,你这个数组名加他是吧,直接呢,我这样customers这个写一个index这样写好不好呢。你想找哪个位置,我就直接从数字里边给你去找就完了,对这个这样写法不好。这个呢,就是一方面呢,就是你这个index呢,假设我们这个数组长度是十啊,你这个index你可能写的这个数有点过分了,十几啊,20啊,30啊,是不是一整就报异常了,报什么异常控制针还是脚不越劲呢,其实大家说的都有道理。
13:15
嗯,就是咱们上边呢,这个本身这个数组其实还没有初始化呢,啊啊,但是假设初始化了,在这块呢,其实你是角标越界了,但你要没有初始化呢,是就控制人了。啊行,这是一个一个问题啊,另外一个的话呢,比如说我们这时候呢,确实是能存十个数字的,长度是十啊长度是十,然后呢,我们只存了三个人,那你这时候的index你写了一个四,按说是不是也不太合适啊对,就虽然呢,数组这块倒没越界,但是本身呢,这个后边就没有这个客户啊,你也就不要让他再返回了,所以此时呢,咱们这样写呢,实际上不太好啊,咱们应该严格严密一下说,如果这个啊index首先呢,你大于等于零是吧,其次呢,我们这写合适的范围啊,它得小于有没有等我我想写它哈,Number of customers啊用不用写,等号不用写,比如说你这要是存了五个人,咱们角标是不是就到四了,对。
14:27
啊,所以就不要写了,哎,如果呢,它是在这个范围之内的,我们就return,哎这个事儿。就是天这个事,呃,否则否则你看你光洗了衣服,这不行,你得整个LC也是吧,Else的,我要不洗了,我直接写这是不是也也可以啊这呢哎,你要是写的其他的那些呢,统一的就都return now吧。啊,统一的我们就先都return,那回头呢,你也可以return,让他抛个异常也行啊也可以啊行,这个呢就写到这儿啊有没有什么疑问没有没有呢,咱们就接着往下写了啊啊这个呢,我们说这个嵌妥这样写啊。
15:14
嗯,这样写法上说可能啊报异常。好,那么接下来咱们写这个测试的,呃,下面呢,就来写这个测试类了。我们在这儿造一个。Bank的一个test。好,下面呢,咱们写这个具体的这个测试啊,测试呢这块看看有没有什么要求呢,没有什么也没写,那咱们就自己看着写了,嗯,行,我这就关了啊,首先我们得先造一个银行,好,银行就造好了,银行造好以后,下边呢,我们就想银行呢,我们去艾customer了啊,去这个添加这个客户了啊,添加客户这块,我们比如说还是叫这个J是吧。
16:07
呃,建史密斯好,这呢就添加,哎想呢就添加到这客户里边,这时候呢靠谱吗?写一点呢,我们先执行一点,执行OK,哎挂了。嗯,挂了以后呢,你看啊先呢,是在咱们这个测试这个这一行执行挂了的,呃,这个挂呢,在这里边呢,你又掉了这一行代码的啊在这挂的,咱们现在这不是掉了一个爱了吗?是吧,在这挂了报了一个叫空指针的一场,为什么我们讲数组的时候说报控制帧的原因是什么呀。这是一个一伟的情况。就是no是吧,对这个数组是不是还没有给他去new一个数组了,哎,就错到这了,哎,我们刚才呢,通过这个new的方式,这不是造了一个bank,造完这个bank呢,在堆空间当中,这两个变量呢,也都存在了,它是一个引用类型,它是no,这呢是一个in的型,它是零,这个零呢还行,咱们也希望它一开始就是零,但是你这个结构上来再是闹的情况下呢,就给它去往里放元素了,是不是就错了,哎,这就不合适了。
17:29
啊,那得保证我们在调用这个I的customer之前,把这个数组呢造出来。能理解吧?啊行,那这个造的话呢,这个方式有很多种了啊呃,有的呢,就是你直接可以在这块给个显示初始化,咱们就是说呃,变量呢,或者叫属性赋值,咱们不是说过好几个位置吗?哎,你可以显示复合值写到这行,或者呢,写到勾构造器里可以吧,也可以啊哎,我这去拗一个customer,比如说长度呢,咱们先给一个十吧。
18:07
这样,嗯,有同学有没有说想写的,我把它CTRLC,我我写这。这就不写了,这样行不行?这这就成啥了,掉一次方法是不是造一个数组,那你之前的那个元素是不是没存上呀,对啊,就相当于本身呢,是应该造好一个以后调一次方法呢,存一个人再调的方法,再存个人,再调呢,再存个人,你现在成了是第一个方法呢,造个数组,存一个人再调的时候呢,再重造一个数组,再存一个人,这个都不要了,显然不对是吧?哎,得捋清楚这个过程啊,所以呢,这个不能要。啊,那大家呢,就是可以呢,写到构造器当中也可以呢,在这显示的,给它赋一个值啊这是都可以的啊那有了这个初始化以后,我们再去啊爱的真正就能进去了,哎你看再执行这就哎不会报这个异常了,就啊行,那这时候呢,就添加了,添加完以后呢,这个人呢,其实还没有客户呢,啊还没有这个账户呢,那你就可以bank点,咱们先去get一下,我这个时候呢,是不是索引是零啊,我先找到这个人,然后呢,我给大家set一个账户,账户呢我们去给大家来一个,诶匿名对象out斜杠一下。
19:33
嗯,咱们这个是练习四里的啊,那就这里边儿呗,先给大家存上2000块钱。看能不能看得懂这个。写成一行了都啊。哎,这样呢,其实是OK的啊,这是OK的啊,然后这样呢,写完以后,哎这块呢,我们比如说让他花点钱啊,我去呢,Get指定的这个customer,还写这个零,然后呢,咱们再去get他的账户,拿到他的账户呢,我再去给他去取钱。
20:07
哎,取了这个500块钱。这不就是取钱的吗?取之谦还剩多少钱,那又得是半个点获取你这个客户,再去get你这个账户,再去get一个balance,这不就拿到它的余额了吗?我这呢,先付给一个变量,诶,然后这时候我们打印一下,说余额为,说客户客户谁客户呢,我们也可以这样啊,这就是bank.get一个customer0.get它的一个first name吧,还说他的账户余额为。哎,加上咱们的balance这样子,哎这块这个逻辑呢,就相较于之前呢,就看着就更复杂一点了啊,哎,我们这里边为什么复杂呢,出现了这样的问题,呃,这呢是。
21:12
原来呢啊,这是一个账户了,现在说这个账户呢,你生命在这个客户这个类里边做一个属性出现的了,然后整个呢,这个是一个客户,他又存在于我们这个银行里边有个属性,属性呢是一个数组类型的,然后每个位置呢,又是一个这个具体的客户,所以呢就显得复杂了,我们呢,先得造一个银行的对象,通过这个银行对象呢,咱们去调这个数组,数组的这个元素呢,是一个它然后调到它呢,它再去调这个账户,账户呢里边有余额,再去调余额,所以看着呢就结构复杂一点。啊,但是呢,大家下来捋一捋,肯定是可以捋明白的啊,那我们花了500块钱,这不就剩下1500。嗯,这样。哎,此时的话呢,我们也仅仅是添加了一个客户,呃,比如我们下边啊。
22:07
哎,我这呢,再半个点我去艾,哎再添加一个客户,这呢先写这个名啊,比如咱们班里边这个万里。杨。行,诶这就写上了啊这呢我又添加了一个客户,那咱们里边呢,自动的也对这个变量呢,进行了一个加加操作,诶我们回来比如说这时候他也没有账户啊,哎,咱们这呢,只是查询一下,说银行现在的客户有几个银行客户的,哎,个数为,诶我们bank直接点盖这个number of customers那就可以了。
23:01
诶,这边是账户有俩,诶就是你每次艾特一下呢,它自动的里边就给你加上了一个。啊,那回头呢,大家里边细节的我就不往往下写了啊,诶大家呢,可以这样,就是我们这银行呢,咱们是造了长度为十的一个客户这个这个数组了,哎,你可以呢,把这里边呢多附几个,然后呢,每一个人的话呢,你再给他指定一个账户,哎那回头呢,你可以写一个for循环,For循环呢先来便利这个银行里边的这个数组,然后呢,便利每一个的时候呢,你顺便呢取到他每一个账户里边这个余额是多少,一个一个的给他打印出来看一看。啊这呢就是整个咱们这一道问题啊行啊这呢是具体这个测试了啊这里边儿呢,像这些的写法连连续操作的,哎,大家来体会一下这个啊哎连续操作,那需要注意的就是这种连续操作呢,写起来是挺爽的,但是如果说呢,要是这一行出现控制帧了。
24:02
那你排的时候呢,就得小心一点了啊,你看我这里边至少这是一个点,这是一个点,这是一个点,如果这一行出现空制人了,那是不是有可能是这个点前的这个空了,也可能是你这个时候呢,他空了,也可能是他空了,那还有可能是这个方法里边空了,哎,那就排的时候呢,就稍微慢了啊,你要是这一行这种,那肯定这个就是八成是他空了。啊就好排一些啊,这就算是一个区别点成这。
我来说两句