ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

第三次java总结

2022-06-15 17:34:07  阅读:163  来源: 互联网

标签:总结 接听 java 第三次 拨打 通话记录 座机 用户 收费


前言:

    最近三次PTA题目所涉及到的知识点主要是封装、继承、多态,题量较少,难度偏低,题目的测试点设置并不好。

设计与分析:

  PTA作业座机第一次迭代

    

 

 

    如图,设计了许多的类,类之间的关系如下

 

 

    

 

     其中,用户的付费方式为抽象类ChargeMode,在第一版中它只有一个子类LandlinePhoneCharging,即座机付费方式,每个用户都有一个号码溥,并且号码溥有许多的分类,座机打哪里的座机,手机在哪接听的,发送信息和接受信息等。此版只用到有关座机的。

    第一版的代码结构清晰,但是main函数写的不好,运行顺序不好看,代码也不够好看。

    

    PTA作业座机第二次迭代。

    类的设计如下

    

 

     增加了许多的类,保留了上次版本的座机功能,并且增加了手机打手机,手机打座机,座机打手机的功能。

    类之间的关系简略的说一下。用户有收费模式的属性,该属性的类型是收费模式类ChargeMode(abstract),他的子类有LandLinePhoneCharging和MobilePhoneCharging。还有收费规则类ChargeRule(abstract)它的子类有许多,每一种收费模式都有许多的收费规则,收费规则就是ChargeRule的子类,例如LandPhonelnCityRule(座机在市内拨打电话的收费规则),在ChargeMode(例如LandLInePhoneCharging)类进行计算收费时会调用该类来计算。

    因为第一版main函数写的不好,所以在第二版重写了一次mian函数,写完之后代码结构清晰,方便修改,可读性极强,有大量的注释。

    main函数代码运行情况如下。

    

 

     先写了两个函数用于过滤开户操作时的异常情况。

    然后定义了几个正则表达式,只有符合条件的输入才会有效。

    

 

     首先就是开户操作,只有符合上述几个正则表达式,并且不会被判断用户是否重复过滤掉才会被开出户来。并且一旦离开开户操作(读了一条通话记录)则彻底离开开户操作。

    其次是将通讯记录记录给相应的用户。对应的情况有很多,但都是等效的,这里就只展示手机打手机的。只有符合短信输入的正则表达式,并且不会被判断记录是否重复过滤掉才会被记录。将通讯记录识别并记录到用户的哪个号码溥里的拨打记录,以及识别并记录到用户的哪个号码溥里的接听记录,对通话记录的处理时,则用到了CallRecord类,识别通话记录的拨打号码,接听号码,拨打所在地区,接听所在地区,拨打时长。

      

    再其次就是结束部分,如果一旦输入了end,则程序结束,不再接受任何数据。(这里有点小插曲,砸门待会再说)

    

 

     

    然后就是将用户组里面的用户通过冒泡排序根据号码顺序来排序。

 

     

    最后就是输出了。

    

    程序到此为止就结束了。

 

 

  PTA作业座机第三次设计时由增加了短信接收功能

  类的设计如下

   

 

    第三次作业有着代码限制,所以不得不在提交作业时删减了许多的类

踩坑心得:

  在第二次迭代中输入测试数据c=3.0,d=0.0,思考发现,虽然用户拿到了自己的通话记录,但是calCost函数没有判断用户是作为拨打方还是接听方,直接默认为拨打方了,所以给calCost函数加一个判断。但是这样改的话较为复杂,于是选择在设置balance的时候加个判断。经调试发现并不是这个问题,用户的计费方式是由自身的通话记录判断的,放置的很清楚,接听就是接听,拨打就是拨打。 问题为其中的25行,获取的通话记录表错了,不是userRecords.getAnswerlnProvinceRecords(),应该是userRecords.getCallinglnLandRecords()。

 

    

 

 

  在第三次迭代中,对信息处理方面,本来是用空格来分割输入内容的,但是信息内容里面也肯会有空格,并且如果信息内容为空,则还会出现没有空格分隔而出现数组越界的情况,因此,直接改为输入内容的第28位以后均是信息的内容。

一切都改好,并且自己测试无误。但是PTA的许多测试点都报错,在怎么想都想不到问题,怎么测也测不出问题的时候,发现了这一行

    MessageRecord messageRecord=new MessageRecord(a.substring(2,13),a.substring(15,26),a.substring(27,a.length()));

中的substring第一个参数可能和我想的不一样,于是将原本的28改为27(将信息截取从第27位开始改为第26位开始),突然就满分了,超级激动,原来卡我这么久的问题在这里。

改进建议:

  在做大题目时,一定要设计,多花时间去设计,先多想到底怎么搞,程序是如何运行的,题目的要求要如何做才能够达到,不能一上来就写代码。

总结:

  此次的作业收获还是蛮多的,又是一次新的,从来没有试过的设计方式,以前都是将如何收费写成函数或者直接写在计算收费里面,这次则是将其写成类;以前会将座机收费模式、手机收费模式写在main里面,分区域进行处理计算,而这次则是写成了类并且作为User的属性。有着非常强的拓展性,又一次体会到了开闭原则的美。

  这次的代码结构自认为非常清晰,并且main函数也很好看,可读性极强,运用了大量的注释。以后也要保持写注释的习惯。

  

  再次希望老师能够多出设计类的题目,让我多见识见识还能怎么设计,并且设计能力才是最宝贵的地方

 

标签:总结,接听,java,第三次,拨打,通话记录,座机,用户,收费
来源: https://www.cnblogs.com/A180/p/16379079.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有