00:00
大家看一下咱们这个模型写好了,咱们开始干嘛。啊,咱们先得在这个购物车这个cut里面先编写好人家这些功能方法。啊,来,我们先写一下,在cut里面咱们提供这些功能方法,Public went an item,咱们写方法写上,啊,这个地方是cut it层,好添加商品项,好了,我们复制一下走。还有呢,Delete item删除商品项,删除商品项只需要传进来ID就可以啊,ID就可以。OK,删除商品项目。还有什么呀,清空购物车。星空购物车的话是clean啊,不需要参数。
01:06
哎,还有呢。还有啥?修改商品数量,修改商品数量,然后update count ID。然后in count,好,就需要这些方法,我们逐个的来实现一下,咱们先看看添加商品数量。那么添加商品数量这个地方,咱们写成i.an。好,把cut item呢放进来,那么大家想想,这就是添加商品项的,但是这么写它对吗?它合适吗?它不太合适,哪不合适呢?咱们注意看一下哈,那如果说每添加一个商品,咱们就直接放到这样的一个集合当中,那么问题就来了,大家想想哈,咱们时间简史第一次添加的时候,它的数量是一单价30金额,总金额也是30,那么第二次再添加这个时间简史的时候,大家看我们直接放到这个集合里面,那么也就等价于它这里又多出一个商品项。
02:16
数量还是一,单价还是30,总价还是30。对吧?呃,这就是问题了,那么如果说你添加了上面已经存在的话,大家注意看,我们不是在这里列出两个来,而是在这个数量上面。进行累积啊。大家注意啊,而是在数量上面进行累加,好,那么基于这种情况,大家注意看,在这个地方不能够直接的添加,而是怎么办呢?先查看购物车中是否已经添加过此商品。对吧,呃,如果已添加,则。数量累加,然后总金额什么东西呢,更新就这样子,大家就样子,如果没有添加过,诶那么直接。
03:13
放到集合中即可。就这。啊,就这这就是咱们添加购物车要做的事情,那怎么样去查看这个商品已经加入到购物车了呢?那其实很简单,大家想想啊。这个购物车里面它的商品编号是唯一的,我们只要把这个添加的商品项的编号和这个购物车的商品编号去找一下,如果找到了说明什么他已经添加过了,如果没有找到,说明什么还没有添加,直接放进去就行了。哎,直接放进去就行了,好,那我们看看怎么做哈,那按照现在这样一个方法啊,那就是I乘点负循环是吧?呃,然后呢,咱们的这个地方,那cut i.get ID要等等于I长点KID是这么这么错吧,哎,但是大家注意看一下,这么写其实还是挺麻烦的。
04:18
我们有一个更简单的方法。就这么查找,就不需要我们自己写了,大家看啊,你这么查找是不是得自己病历。不太好怎么办呢?我们可以把这个集合换一下,换成map集合。然后这个map呢,它的键呢是inte,类型值呢是it。然后后面这个地方变成什么link哈西map,然后in,然后cut item OK改成这样子啊,这个发型放到前面。改成这样子,那这样子有啥好处呢?咱们说明一下哈,那咱们说这个P是什么商品编号,那它是唯一的哈,然后value是商品信息,那么如果是这样子的话,大家想想哈,我们这个查找操作还需要自己写吗?
05:16
完全不用怎么做呀,大家看it.get就可以了呀,然后呢,你把这个看看上你get的ID放进来大家看。我是不是通过人家的这样一个map的方法直接查找就行。嗯,而且map的查找呢,比我们这个自己去病历性能还要好一些。还要好一些,哎,那代码是变得很简单,那这个时候呢,你只需要简单的判断一下,那么这个I大家注意是不是等于空,如果等于空就说明没有添加过是吧,之前没添加过此商品,那么直接放到集合中就行了,Item是点put,那么cut item.get ID。
06:04
后面呢是cut it,那么已经添加过已经。添加过的情况怎么办?我们说数量累加总金额更新,那么数量累加我们来看一下哈,那么i.set count怎么办呢?取出它原来的数量,加上一。好,总金额也在累加,那么item.set total price怎么办?用它的单价乘以,这是乘法啊,这是乘法。乘以,大家看它的参数是什么big,那你还得用一个乘以数量,大家注意乘的时候它是不接受in类型的,你去必须要把这个数量,诶数量呢,这个取出来生创建一个big才行,那么这里就iem.get count得写成这样。
07:05
哎,放进来好,那这个是什么呢?哎,数量累加这个呢,更新总金能,更新总金能好这就是添加商品项,这就是添加商品箱,然后。咱们再来看一下删除商品项,删除商品项呢,就简单一点啊,Items点。Remove,删除嘛是吧,那你把这个ID放进来就好了,直接删除。啊,这没啥可说的,然后清空呢,也是直接清空这个集合啊,直接清空这个集合,那么修改数量呢,要注意怎么大概怎么做呀,就先查看。哎,那么集合中或者说是。购物车中是否有此商品?如果有,那么修改商品数量,更新总金额,就这样子更新总金额,来咱们看一下哈,我先看看这里面有没有这个商品,怎么看呢?就是it get。
08:21
ID,我先看看有没有这商品。然后在下面咱们说cut item不等于now是吧,不等于now。完了以后,这里面如果不等于控制说明找到了嘛,那咱们就来改一下商品的数量。修改商品数量,然后更新总金额,这个更新总金额呀,其实跟啊这操作是一样的啊,咱们就拿过来就行了。因为这个鞋子比较麻烦,我就直接拿过来用了。
09:00
好。这样就好了,这就是,嗯。更新商品数量。好了,那么这些功能方法呀,咱们写好之后,咱们要对这些方法呢进行一下测试。啊,进行一下测试,诶这里有什么东西报错呀,还报错是吧?啊应该是这个map,咱们刚刚修改过之后,你看这个地方啊,能看见咱们改这里是没改过来呀,把它删了重新生成一下。就他OK,咱们来测试一下哈,怎么测试。咱们在这个类里面,CTRL加shift加T。来走,嗯,咱们生成的测试放在哪个包下,放在厕包下。用的是UNIT4啊,用UNIT4,然后呢,勾选上你要生成的这个测试的方法啊。哎,咱们就测这四个,其他呢,就是不测了,是get测的,没什么可测的嘛,这也没什么可测的,来勾选上。
10:06
啊,勾选上,那么这个代码就生成到测试的包厢是吧?我们来测试一下,首先有一个购物车对象,好,然后呢,往这个购物车对象里面添加商品项cut item。好ID呢是一,哎商品名称咱们选什么呀,这个Java从入门到精通是吧?哎,从入门到精通,然后数量。数量呢,咱们就一个吧,每次添加时候添加一个啊,然后技能new big格西某咱们给个1000吧啊,然后总金额new逼哥底西猛也是1000啊,也是1000好。
11:00
那么接着我们再来添加几个商品。咱们故意再添加一个,一再添加一个一模一样的哈,我们看到累加不累加,嗯,然后呢,我们再加一个啊呃,咱们说这个数据结构与算法啊,这也是一个,呃,然后单价呢,咱们换成100是吧,就换成100 OK好了,那么现在我们来打印一下这购物车。我们看这个购物车中的数据啊,是否正确,咱们选中它执行一下。稍等他的变异执行啊,好,大家来看一下已经输出了。咱们看这个数据,你发现没有总的数量和总的金额。都不对,对吧,都是空,那那我们看后面吧,那集合里面呢,呃,第一个商品从这面到京东数量是二,单价是1000,诶总价是2000,这个还行是吧,然后这个第二个商品数据结构的算法一个啊单价100,总价100还行,就是什么总的商品数量和总的基本来说对,那怎么办呢?因为咱们其实没有对它进行累加过啊,大家注意看一下这两个值,上面这两个值其实咱们没用过。
12:18
好,那咱们取一下啊,取一下那么大家注意看。这两个值咱们给它进行设置是吧,那设置是在哪里用的呀?是在这个地方用的set方法里面,但是大家注意看这个set total count这个方法有必要存在吗?有同学怎么没有?你得调用它设置的总数量啊,其实大家想想哈,这个总的商品数量是由什么?是由这个购物车当中每一个商品数量。每一个商品项的数量,记住啊,累加得到的对吧,但如果说我通过这个数量随便给你传一个值,你能附上吗?
13:04
是不是不行?对吧,对他想明白吗?所以这个set号码其实它是不行的,你不能够直接对它进行设置操作。你只能够在购物车的内部啊,去便利这些商品项累加得到,所以这个现方法不行,以及这个购物车的总金额,其实现方法其实也是不能用的,你想想啊,就这个我给你一个总金额,跟你累加的结果不一样,你能用吗?也不能。也不能啊,大家要记住啊,那所以这方面也不能用,就咱们了解一下,OK,那怎么办呢?其实你只要在这个地方get total count get total price这个地方累加就可以了,那我们来看看。咱们说呃,Total count,咱们先给他个零啊,然后去累加变列一下啊,咱们说items。点。这能并立吗?It点负。
14:03
啊,它这里就有个for each是吧,那来吧,咱们就手动写吧,For循环大家注意看一下哈,那么map.entry那么这里面是什么东西,Intake,然后cut items,然后这个地方呢,是it点。Entry set去便利一下。诶,大括号都没输出,好了,那么大家再看一下哈,这是干嘛?这是便利map这个集合当中的每一个ENT,也就是每一个建设,对,那么我们只需要干嘛,我们其实只需要它的。值就行了,所以这个地方大家看一下哈,entry.get value。点get什么东西,Total count,哎,去跟这个值累加,那么total count加等于对它的值就行了。
15:03
啊,这里就可以返回。当然这个便利操作大家注意看呢,写法有好多,这是一种写法,或者说我们也可以干嘛。大家看下我们也可以干嘛,就是it.values这是什么?取得这个构成商品项中的每一个商品项,For是吧,你也可以这么便历,你也可以这么跟例啊,都都可以啊,都可以好了,这咱们了解一下,嗯,行,咱们写一种就行了,那么我们遍历之后累加,然后把这个值返回。啊,把这个值返回,那么大家注意看一下,那其实在整个过程当中,这个方法我们用到这个变量是这个什么呢?购物车里面这个变量。对吧,是购物车里面这个变量,也就是每一次对它进行更新,咱们要其实是调用,大家看其是调用这个方法。对吧,直接返回,那其实有意义吗?现在没啥意义,就我们说的是这个变量没有意义啊,不是这个方法没有意义,为什么?大家想想哈,我们既然每次更新都调用这个方法,那么我这里就有这个变量,我直接在里面定义一下,大家想想啊,我这个变量这么定义,那我这里不用它是不是也行?
16:14
不用他是不是也行。对吧,你想想哈,我们每次都是调用get total com就可以取得一个最新的值,那其实这个变量定义里面是没有什么特别意义的,那有同学老师那下面打印呢,其实下面打印的时候,大家想想你每次取这个。总的商品数量上调,用这个方法取不就完了吗?因为他每次取其实就是得到一个最新的值,何必占用一个变量去去去接收呢,还还占用这个内存是吧,就暂时可能用不上,咱们先把它去掉,那这个总金额呢,其实也一样。总金额呀,也是跟上面一样要变利,然后呢,把每个金额累加得到啊,那我们说total price等于6BIG disim先给他一个零,然后呢,我们去遍历一下,我们把上面这个复制过来,遍历怎么做,这个地方咱们来看一下哈,我们说total price等于total price.a添加。
17:21
哎,添加什么东西,这个get value.get total price,大家看一下你当前这个总金额加上每一个商品项的总金额,然后附一下值,那其实这个地方跟前面那个累加总的数量一样啊,其实你这里面定义一个变量,这个Dis其实就可以了,咱们大可不必把这个变量定义到这个全局去,因为我们说定义变量的时候啊,我们能使用局部的是吧,咱们就使用这个方法内的局部变量啊,没有使用全局,那下面这个地方输出的时候,其实你也可以调用这个get total price其实就可以了。啊,这样就可以了,好,那如果这么改完之后,这边能用不能用了,大家注意,关键是改完之后这个测试没有问题,这才是最重要的啊,那我们来执行一下。
18:12
我们看看下面这个打印的值对不对。大家看一下哈,咱们上面是添加了三个商品,你看数量是三八,总金额2100,为什么呀?就从日本到精通是1000嘛,那两本不就2000嘛,再加上一个100的,那就是两千一了,这没啥可说的,那后面这个值呢,你看从日本到精通两个单价1000,总价2000,没啥问题,那后面这个呢,单价100,总价也是100,诶你看没啥问题哈,没啥问题,那我们接着看看其他就比如说。我们再测试一下删除商品项,大家看一下哈,我这个删除商品项的测试啊,我是直接你看啊,我是直接把前面的测试复制过来,然后做一个累加测试。
19:01
Cut item delete啊,咱们删除一个一就行,为什么我做哪家测试呢?因为对于购物车而言,它都说需要这个反复的添加、删除、修改,那么这个过程得到的结果它始终是正确的,所以我们可以拿着它一直来做累加啊,我删除这个一,那它就应该剩下什么,就剩下一个二,就一个商品,我们看看对不对。啊,如果累加操作的过程当中有一次出错,就说明你的代码写的有问题啊,大家注意呃。数量是一的来看定吧,就剩100,就剩下什么数,结构相反,说明没啥问题。是吧,啊,这个时候删除它不是把这个商品简易,而是把这个商品项给删了啊,然后再看看清空。我把这个拿过来。继续放到这里去累加测试,删除完之后,我这个卡点啊,那这时候就空了。
20:00
我们看一下空之后的打印是什么,稍等啊,大家看呃,总的数量是零,也没有什么金额,这个几何里是空对吧?哎,几何里是空,呃,然后修改商品数量。我们把这个拿过来继续累加,那么它清空之后啊,大家看一下,他又添加了一次这个商品,我们把它拿过来啊,然后添加完之后呢,他又对这个商品呢,进行了一个数量的修改,比如说这个改成多少,改成十个,改成十个之后,我们看这里面是什么情况啊,大家看啊,你要看清楚,清空之后就已经零了,就添加是一个一个改成十个,就是这个东西添加了十次啊。呃,来,我们走一下。稍等。大家看是不是一共十个商品,每个是1000块钱,那十个就1万,你看这里是十,数量是十,然后单价是1000,总价是1万啊说明没啥问题,这就是咱们这个购物车的功能方法啊,了解一下。
我来说两句