00:01
呃,随机生成两个通话记录的电话号码呢,咱们现在呢已经得到了啊,咱们这种使用方式呢,是用的那个随机数的方式啊,这个呢,同学们下来呢,我相信啊,试一试就应该没有问题了,但重点呢是这个思路啊,就是我怎么能够保证我们的这个数啊,它这两个位置呢不一样啊,这个呢,我们不要不要写错了就可以了啊,然后下面呢,我们往下走啊,下面呢是生成随机的通话时间,以及随机的通话时长,这个通话时长这个相对来说比较简单啊,咱们写个浪啊,写成一个浪,咱们叫通话时长,我就写一个,嗯,咱们就叫做call啊,咱们就Du吧。诶,一个时长啊,好了,那么你通话的持续时间,就是我们所谓的通话时长,那咱们前面讲了啊,这个也不要太长了啊,我觉得在一个小时30分钟左右就差不多了啊,所以呢,在这里呢,咱们想想啊,那我这里就可以简单点叫new rhythm,那然后呢,我们这里点我们的next。
01:04
然后呢,我们点啊这个我们的int,那我想想啊,咱们如果按秒来算的话,那么60秒呢,是一分钟,那么我们乘以呢30啊就是半个小时,或者呢,你可也可以什么呢?我们说啊一什么这也可以啊,一分钟60分钟一小时也可以,但是呢,其实我们这么写问题倒是不大啊,但是我们这里还是把它写成这个吧,嗯,写个3000,嗯好了,那我写完以后啊,有个问题,有什么问题呢?它既然是随机数,那么随机数生成的结果,它的长度怎么了就不固定对吗?什么意思?也就意味着你可能是什么呢?生成了189,也可能生成了什么1000多对吗?然后呢,你还可能生了什么呢?一有没有可能有吧,可是你会发现结果没问题,可是这不是我想要的啊,为什么说不是我想要的呢?因为我想要的是什么,我想要的是它的一个固定长度,为什么呢?你回过头看我们这个,咱们。
02:04
他的这个通话日志当中,大家看你会发现后面的是不是都是四位的,都是四位的,为什么呢?因为我希望呢,咱们的数据按照一个特定的格式传给别人,那别人的话读取数据的时候可以快速读取,否则你是三个还是一个还是两个,我不确定,那读起来就不方便了,所以呢,我希望呀,咱们这个长度是一个固定的啊,有了固定长度之后,那么我们用起来就方便,所以啊,咱们这儿也这样,因为呢,你最大也不可能超过3000去,那所以呢,你的长度应该是四位的,那所以呢,我不管你是多少个数字,我只希望你没超过四位的话,或者你不够四位的话,我用零给你补上,什么意思呢?就这意思。你不够四个长度,我给你补上零缺几个咱们补几个,那我这个该怎么做,同学们我该怎么做,那我们是不是可以判断一下我当前的这个数字的大小啊,对不对,然后怎么办?然后判断它的所它的字符串什么意思啊,就这意思,我们能不能我们叫做duration的string,它等于什么,把这个加上吧,你加上以后,那是不是我可以怎么办,我是不是可以判断呢?也不用判断,咱们直接复循完了就可以了啊,复循完干嘛呀,我写个叫int I等于零,I小于小于什么呢?用我当前的这个长度点我们的S,我们减去几啊,不也不减去几了是吧,应该是应该是应该这个东西啊。
03:41
然后呢,我们爱加加能明白什么意思,不就意味着我现在呢,我们说用你比方我举个例子,你的长度呢,现在是什么是三,那你长度是三的话,那我这里是不是应该四减三等于一呀,那么二小于一是不是循环一次呀?那如果你是一的话,那么四减一是三,就意味着你要加三个零对吗?那所以我是不是就完全可以怎么办?我是完全可以把这个咱们拿过来的啊,拿过来以后呢,我们干嘛呢?我们这么写,再加上什么等于。
04:11
啊,零这么写不对吧,应该是零放前面吧,啊零放前面啊,所以我们这应该换一个啊,换一个写法,咱们应该把这个拿过来。它应该等于我们零在放前面啊,零放前面,那OK,我们写上它OK,我这么写对不对,对不对,不可能对,这么写就不可能对,你知道为什么不可能对吗?因为当你加完零以后,你再去做判断的时候,这就变了。能明白什么意思,不记住啊,这个是我们写代码就考虑不到的地方,就是你感觉这没啥问题啊,你现在是一四减一等于三,但是你记住了,四减一等于三是我们第一回循环的吧,当我们这个字符串它如果已经变化的话,你第二次再走到这的时候,是不是就已经变了,就变了啊,所以这个如果不事先跟你说的话,我们有的同学就容易写错啊,所以这个呢,我们就不这么做,这么做是不对的啊,那我们应该怎么办?是把这个给它提出来,你提出来以后就固定是个长度吧,对不对,四减一等于三,那是不是就循环三次呀,就完事了啊,这么写就可以了,把它提出来,但我们这里呢,咱不这么做啊,咱们给它来助掉啊,这个我们可以这么做,但我不这么来做,那我怎么来做呢?很简单,我们的Java当中其实就有我们对应的格式化操作。
05:36
也就意味着我们有个叫December format,有这个东西叫数字的一个什么格式化,那么也就意味着我通过它就可以把咱们的数字变成指定格式的什么内容,所以啊,在这种情况下,那就跟我们的工具类就有关系了,所以我接下来在咱们YouTube里面要创建一个工具类来实现我们的操作,所以我点一下咱们叫做new啊,创建这个类呢,我们就写上咱们叫number啊,我们的数字的一个,嗯。
06:10
然后呢,在这里呢,我们把它补充上啊,写上咱们叫数字的什么工具类啊好,接下来在这里呢,我们准备了,咱们叫做public啊,然后我们返回一个字符串,咱们叫format,诶format OK,那么format以后呢,我要把一个呢,我们的数字给它格式化啊,从我们的一个字符串,那这个数字你要传给我,我给它一个I啊,或者叫number吧,咱们叫number啊好了,那我后面再来一个,我来一个什么呢?我们叫做嗯,我想想呢,咱们叫X。什么意思啊,哎,我看啊,这个零就固定吧,也别叫前缀了,前缀什么意思呢?就是以什么开头是零啊,是一啊是二啊,还给他补全了,那我这个就不加了吧,我加这么个东西,什么东西呢,叫ne。什么意思呀,是不是我们的长度啊,哎,我们的长度啊,好,然后呢,我接下来,我接下来写什么呢?我这么写啊来,我们叫做叫做什么呢?叫December form,咱们叫DF,它等于new,我们叫做December form OK,我们这么写,写完以后呢,我们直接return,咱们叫DFDR,我们把一个我们的数字,我们的number给它格式化成我们的什么A字物串就可以了,所以呢,我们写上将我们的数字啊,将数字我们格式化,嗯,格式化,格式化为我们叫做什么呢?字符串,哎,就这个意思啊,好了,可是你格式化为字符串,你应该怎么来格式化呢?诶告诉大家很简单,在这里写上对吧,格式化的那个诶我们的字物串就行了,这么写。
07:52
你写上四个零,它会自动的干嘛呀,把它补为我们的四个零啊,所以啊,很简单,那么我们这里来试一试,我们public AB public了,咱们这里呢,直接来我们给个main方法,给个main方法之后,我们是不是可以直接测试呀?诶可以直接测试了啊,所以来我们写上它,我们加个括号,比方说我写个十吧,然后呢,后面这个长度随便写啊,咱们现在还没用上呢,还是我直接随便写了啊,然后呢,这边我忘了加静态了啊,应该是静态的一个方法啊好,那现在呢,我就运行一下,运行以后看结果。
08:28
对不对,是不是满足了我要求,我是四位的长度,然后呢,你是幺零,那么只有两位,我要补两个零,不就这个意思吗?所以啊,这个满足我的要求,但是如果你光写四个零的话,是不是就感觉它固定写死了,所以我的这个到底多少位我不确定,要根据这个长度来决定,所以在我前面这个地方,我写上叫string builder啊,我叫string builder等于new我们的spring builder,哎,我这么写,写完以后,那现在呢,干嘛呢?我们就写上,你这里不有一个长度吗?那我这里就直接写了啊来,我们写上叫in特I,它等于1I小于等于我们的长度,然后I加加,I加加以后我的string builder我就来加,就完了,点end,然后把这个零加进去,这样的话,我循环多少遍就会有多少个零,那这个时候呢,把这个string build我传进去,这样的话就不是固定写死了,所以我们to string。
09:27
那这样的话呢,你说六位,哎,我就补四个零,那就完事儿了,那这以啊我这里呢,就诶就给个十位吧,反正咱们这都有啊,所以我运行一下,嗯,我运行之后我点一下大家看对不对,没错吧,啊我补多少位,我想补多少位补多少位对不对?哎就靠一个我们的格式化对象就行了,所以啊这个没问题,那没问题的话,那我这呢就简单了,干嘛呢,我就直接来,咱们就不叫做int了,咱们叫什么呢?String,然后怎么办?我们叫做number u对吧,然后点我们的format,把我刚才随机的这个什么呢?诶拿过来,拿过来以后放过来,然后再传个什么东西啊四啊,长度为四的一个我们的什么,哎,字物串就这个意思,那这样的话,我们的这个duration是不是就有了,哎,就有了,这个我们就不要了啊,这个咱就删掉了,否则太乱了啊,咱就不要了,OK,那这个呢,咱们也不要了,嗯,行,那这个有了。
10:27
那接下来是什么了,接下来是不是我们的这个通话时间了,在哪个时间点来通的话吧,那我们说了,你不能这个时间你随便生成,那不行,咱们最好的有个范围,在2018年的全年当中的任意一个时间点,在全年当中的任意一个时间点,那我该怎么做这个事儿,那么也就意味着我是不是应该有一个范围啊,哎,所以我应该有个范围,这个范围呢,我叫做什么?啊,咱们叫做start啊time吧,他等于什么呢?它等于2018年的全年,那这个我该怎么做,我该怎么做啊,这个时候,那你想想全年我哪知道他这个时间是多少,我不知道啊,那所以呢,我得这么写,我叫做什么呢?叫做start啊,我们的date啊,Start,我们的date,嗯,OK,然后呢,我这里呢,给它拿过来啊,全年嘛,那我这里呢,就这么写了啊,咱们叫2018年0101,然后呢,后面呢是0000,表示的是小时,分钟和秒,诶就是这样啊,所以我们这里呢,是我们的看看啊1月1号,诶少个零,嗯,OK,这么写,那我接下来光有个时间,我有个开始还不行,还应该有一个结束的这个时间,他应该是我们的什么,2018年的九吧,01010000。
11:57
嗯,零零是不是也可以啊,对吧,1月1号,反正在这范围之内嘛,对不对,那也是没有问题的,好了,那现在这个有了之后,那我就问问你吧,我想计算出来的我的那个时间,那个时间应该是我当前的通话时间,这个时间我称之为叫call。
12:14
就是我通话时间啊,这个时间,这个时间我用一个long,为什么呢,叫时间戳啊,咱们可以用时间戳的方式来表示,这是可以的,或者你不用时间戳,大家看我们最后生成到这里的是什么东西啊,是不是我们的年月日十分秒啊,那所以呢,我先把时间戳拿到,那最后我们应该拿到什么东西啊,是不是我们的什么东西啊,就是我们那个call的他么time string啊,啊就是它,所以啊我先把这个拿到,然后呢,我再转换成它不就完了吗?否则我是计算不出来的啊这在这种情况下呢,我现在问题就来了,这个咱们怎么计算,这个我们写上来,我们写上这个呢,来放到这儿,咱们叫做通话时间啊,通话时间,然后呢,这是那个通话时间字符串啊,通话时间字符串,通话时间字符串啊字符串OK行了,那现在问题就是它怎么算出来,首先我刚才说过了,咱们这个值是不是一定要比它大。
13:15
那说的简单点,是不是应该比他大,这个叫start time吧,这个start time应该是他吧,那这个值是字串,我怎么变成个浪类型呢?啊,这个时候是不是又该把我们的一个字符串变成一个浪,或者变成一个我们的date了,所以啊,我这里呢,来我再创建一个工具类,这个工具类的名字叫data u叫日期工具类啊,所以我点击OK,我点击完成以后,我写上叫日期工具类啊,日期工具类以后只要碰见这样的方法,以后在任何地方都可能会用到的方法,咱们就写个工具类啊,然后放到这儿来,那我的目的很简单了,干嘛呀,我们要给它来解析一下啊,把我们的一个字符串解析成我们的什么呢?一个日期诶,一个date,所以我们叫pass,哎,我们叫pass,这个pass呀,我们这里呢,给它来啊来,我写上咱们叫做什么呢?叫啊是一个我们的字符串,咱们写个S吧。
14:15
好了,那你写个S之后,但是你的格式不能是固定不变的呀,它可以随着我们业务的变化而变化,它应该是不是固定的,所以既然不是固定的话,我写个叫form mark,我叫做什么呢?就叫form吧,诶就这么写好了,所以我在这里加个说明啊,我又写错了,应该加一个static,嗯,应该在这加一个静态啊好,那我这里就写上将将什么呢?将我的日期字符串按照指定啊,咱们按照嗯指定的格式啊,我们叫做什么呢?叫解析为解析为日期对象。诶,我就这样的一个目的,那这个呢,就是我的那个字物串,我为了准确起见,还是这么写吧,叫date string版叫日期字物串,把这个呢放过来,放到这里啊,然后呢,这个就是那个指定的格式,然后呢,返回的就是我的那个日期的对象,那所以啊,在这种情况下,我首先应该有一个叫做simple data format的一个格式化对象,对吗?SDF,我相信这个你们一定都学过啊,所以把这个呢给它拿过来,叫做new,这个new呢,给它放过来,放到这里,放完之后,那么我要把form给它传过来,我要把form传进去,告诉你是按照什么样的格式,这个格式我不定你来定,谁调我谁来定这个格式啊,那所以把它拿过来,拿过来以后,那么我就直接return了,叫SDFDRR,我们这里呢,给它来,咱们叫pass解析,解析的就是我当前的这个东西,它就是它啊。
15:53
好了,那这里呢,可能会有异常发生,那所以呢,我这以呢给它来啊,咱们叫做date啊,咱们叫做date等于它啊把这个呢,我们拿到这里啊好,拿过来以后,我们在这里呢,给它来个date就可以了啊好,那接下来呢,我们把这个地方的异常呢,给它来捕捉一下啊嗯,然后呢,我在这里啊,咱们再来,在这里呢,直接来吧,我们写上一个嗯,这个六吧,嗯,给它来操作一下,这样的话,我返回我们的date就可以了,那行,你这样写完以后对不对,我不知道,先不管它,那我现在呢,这边就简单了,我们直接来个date u DR。
16:33
点了以后我们叫pass,这个pass呢,就把它给它放到这里,然后呢,再来,然后再来拷贝一个,拷贝一个应该还有个叫。N time,然后这个呢,是把它拿过来,哎怎么写,可是后面少了一个格式,这个格式你应该判断一下是什么样子的,是不是应该是年月日十分秒啊,而且应该是一个固定的长度,对不对,那是应该是YYMMDDHH,我加我这有杠吗?
17:14
我这没杠,我这能加杠吗?不能,对不对,你是按照指定的格式,这个格式是你定的,你要取决于我数据是什么样子的,这里面有杠,比方说他这么写的,他如果是这么写的话,你是不是应该是这样的呀,对不对,你这没加呀,你这没加的话,那我这里也不能有啊,所以我这也没有啊,好了,那我这么写有没有问题啊同学们。来,我这再加一个叫get time啊,然后呢,把这再写上一个叫点我们的get啊好了,我这有什么问题。我这么写是不是不对哪不对。我这么写,首先从英文单词的角度来讲的话,跟时间相关的有两个是开头的,一个叫做什么呢?Minute,一个叫做month,对吧?那这两个时间是跟我们的什么?就是我们两个时间有M开头,那么我们的Java呢,它就会以什么呢?以我们时间范围大的用大写的M,时间范围小的用小写的M,那么这里的时间范围是month大还是我的minute大呀,肯定是我的年月日的越大,对吗?那所以他应该是什么?他应该用大写的,而那个minute应该用小写的,应该是这个样子,还有个地方不对,什么地方呢?小十它应该是HH,应该是大写的,那小写的又是什么呢?告诉你,小写的是十二进制的,大写的是24进制的,24进制表示的含义就是说23点,22点对不对,是这么个概念,但如果是小写的H呢,就是下。
18:53
早一点下午两点,下午三点这种概念,这个可能跟我们平时的这种方式呀,不太习惯,你看到个011200,你马上认为是什么01:12了,你不会认为是下午01:12了,你认为是凌晨01:12对吗?所以说我们不按照那种方式来写,所以我们都用大写的方式来做啊,所以我们这里呢,就给它改改,那么改完之后,那么好了,两个时间我们有了,那我就希望我的通话时间就在这两个范围当中,我该怎么做,我怎么能够保证我当前的数据一定在他们的范围当中呢?
19:31
我怎么能够保证这一点,首先啊,这个呢,我就不让你们拆了,是吧,我就告诉你们,你看看我现在写这个东西,你能不能明白啥意思,我写个它再加上一个问号,我这么写是什么意思啊?我这么写是不是就意味着你加上一个数,只要它不为负数,它一定会比开始时间大对不对,就是你你只要加一个数,这个数只要不是负数,哪怕是零,是不是也应该最起码跟它相等,或者比它大呀,对不对,那首先这个是不是满足了?好,那这个满足了以后,但是我还要满足另外一个条件,我不能比它大吧,我要小于它,对不对,我要小于它,我就问你,它加上什么值不能不会比他大,他加上个什么样的值不会比他大,就是他最大,是不是加上这么个值就不会比他大了,什么意思?你用他减去我们的。
20:27
没错吧,那其实你这么一看,它减去它没了,不就这个塔吗?所以最大值是不是就这个值了,但这个不是我想要的,因为你没有随机的概念,那不行,所以我这里再乘以什么呢?我们的ma点二,记住这个值它是一个什么呢?最大的值,也就意味着我一定要有个随机的概念在里面,我就点我们的RY啊,那我的这个的话,同学们想一想,那我这个地方它的取值范围是多少?它是个double double类型是不是0.0到什么1.0之间呢?对不对,那也就意味着它两个地方怎么了?它两个相减之后,你乘以0.0就是零吧,你乘以一的话,当然它不到一啊,它如果你乘以一的话就是最大的吧,那所以它加上它以后,是不是这个值一定在它们两个之间啊,就这样,那如果说老师呀,我不想是这个时间我们再加什么东西啊。
21:24
加个一行不行啊,是不可以啊,啊也可以啊,咱们就不加了,反正随机数嘛,是什么,那也不知道是不是,所以在这种情况下,那我们当前的场合价是不是就可以了,但这里有个问题,它是一个double类型的,我再转成什么呢?浪类型啊,转成浪类型,转成浪类型之后呢,我们在这里再做哦,他这个地方看看,把这个呢给它来啊好了,你这么加完以后,这个call time就一定应该在这个范围当中,对不对,相不相等,咱们另说啊,已经在这个范围当中了,所以啊,在当前场合下,我们的通话时间已经有了,但是我要的可不是时间呢,我要的是那个字符串啊,所以怎么办?你是不是还应该把当前的浪再给它转成我们的字符串啊,所以又涉及到我们日期的转化了,对吗?所以我现在还得再来写一个,咱们叫public,叫static,叫做我们叫form。
22:21
叫格式化啊来,然后呢,这里我们就写上,写上什么呢,将我们的一个date,将我们的一个日期按照指定的格式,这个格式给我传进来,咱们叫format,诶好了,然后呢,我在这里写上啊来,将我们定的日期按照指定的格式啊,格式给它转换回到格式化啊,格式化为我们的字符串,所以我这里照样应该把这个咱们拷贝,拷贝过来以后把这个form拿到,然后呢,我们就直接return了,这个return呢叫SDF,点我们的form,把那个date给我,诶传进去。
23:04
然后呢,我一返回,那这个时候呢,我们格式化就算是完成了。那你格式化完成以后,那我这个不就简单了吗?我叫date u点,反正你都封装好了,你封装好了以后form,这个form的情况下,同学看那我是不是就该new data了,New data把这个long传进去啊,你传进去的话,日期就有了,那么接下来是我们的什么东西啊,格式了吧,这个格式保持不变不就完了吗?那这样的话,我的字符串就有了,这个字务串就是我通话的时间,这个呢是我通话的时长,上面呢是我的两个电话,咱们都有了,那基本的准备工作都有了,我接下来要生成它的通话记录了,所以生成通话记录的话,我在我当前的位置,我要准备一下new,我要创建一个类,这个类叫call。
24:00
啊,就是专门的一个对象,这个对象呢,就是我的通话的一个记录啊,一个对象点击OK,然后呢,在这里呢,我们写上叫private,我们叫做string,我们叫做CALL1啊,再来一个我们写上,咱们叫做CALL2,然后呢,再来一个pro,我们再来写啊这个呢,就是我们的叫call time call time,还有一个叫。呃,我们写上叫duration啊,持续的时间,诶好了,写完之后我们要增加它的那个set get方法,所以我们来找一下set get方法,然后呢,把这个选中,点击OK,诶就可以了,但是呢,那我们这个要一个一个传,感觉也不方便啊,所以呢,我们再来我们这里有叫constructor,叫构造方法,点一下,点完以后我把这四个的我们的属性全给它作为构造方法,可以点击OK,点完以后你就想办法给我构造这个对象,那就行了,所以拷贝,拷贝以后在我当前的这个位置,我就直接拿过来,咱们叫lock,等于new,我们叫call log,然后你把这四个参数给我传过来,第一个就是我们的call 1call一点,我们叫get,我们的tell。
25:14
我们的tell啊好考二点,我们的get跳,哎,第三个是我们的那个,那个我们恰恰有啊,就是他,所以把这个拿过来,然后第四个是我们的duration持续的时间,诶放过来,所以这样的话呢,我们的通话记录就算是构建好了,你会发现还是大量的使用了我们的随机数和一些通用的一些类啊。
我来说两句