第10-16周BLOG总结
作者:互联网
第10-16周BLOG总结
一、 前言:
本学期第10-16周,我主要完成了两项工程量较大的题目,一项为PTA上的电信计费,另一项为实验oop中的农夫过河游戏。电信计费共分为座机计费、手机+座机计费和短信计费三个模块,农夫过河实验已进行近一学期,并于近期达到最为完善的程度。
故此,我将从知识点、题量、难度等方面对两次题目进行总结。
1、 知识点
电信计费考察到了SimpleDateFormat类、正则表达式、继承、多态、抽象类,除此之外,我还运用了TreeMap及ArrayList等语法储存用户基本信息以及用户通话记录等内容,以此实现数据的增加与查找。
农夫过河所考察的知识点则较为广泛,其不仅考查到了继承、多态、抽象类、接口,还考察了接口与继承的结合以及JavaFX的基本用法,利用JavaFX实现游戏界面的设计,完善游戏使用体验。
2、题量
两次题目的题量都较大,其中所包含的类较多,有的类作为父类或者抽象类,有的类作为子类,每个类负责不同的功能,故两次题目的结构都较为复杂,导致其工程量较大。农夫过河实验完成所需时间较长,故其题量相对来说较易于接受,未对实验完成造成较大压力。
3、 难度
电信计费难度较大,该题不仅涉及到的知识点较多,而且还有较多的计算,当输入用户通话记录时,需找出该通话记录符合的计费方法,而后依据其特定的计算方法得出该通话记录所对应的金额。首先将通话记录提取出来并找出其对应的计费方式为一大难点,与此同时,检验所输入的用户通话记录格式是否正确为另一技术难点,除此之外,计算费用为一技术在数学方面的难点。
农夫过河难度相对较小,大体分为五个阶段完成该实验,不同阶段难度循序渐进,知识点考察由浅入深,依据我们当时所学知识点考察。但仍具有一定的挑战性,因当我刚学习一个新知识点时,尚不可完全掌握其用法,故当农夫过河实验用到该知识点时,其对于我来说仍有一定难度。
总而言之,两次题目难度相较于其他实验来说都较大,尤其是电信计费,两个题目都将本学期所学的所用的大部分知识点串联到了一起,利用多个知识点相互结合实现了程序的设计与使用。
二、 设计与分析
1、 电信计费
类图:
解释:
本题所涉及到的类较多,所有类之间的联系较为复杂,结构多元。
本题中我运用到了treemap类储存用户信息(用户号码、市内通话记录、省内通话记录以及省外通话记录),利用treemap的自动排序功能将用户信息按照用户号码顺序进行从小到大排序,以便于后续输出,以及防止了同一个号码多次注册的问题,增加了功能的使用性。
使用了正则表达式验证输入的用户信息的格式是否正确,如正确则将其通过treemap计入用户信息中,如格式错误,则自动忽略该行输入。此般操作不仅能保证输入数据的准确性,也提高了判断输入正确与否的简便性。
不仅如此,我还使用了SimpleDateFormat类计算时间,以及验证时间格式是否正确。SimpleDateFormat可以控制时间格式的统一性,使时间必须符合"yyyy.MM.dd HH:mm:ss"格式,还可以精确地计算时间,以便于后续根据时间对于通话所产生的费用进行计算。
心得:
本题较为复杂,使用了多个类,运用了多个Java知识点,并将多个知识点进行串联,做到了一个题目对于多个知识点的考察,通过本题,我发现了我多个知识点存在缺漏,而后我从各方查找资料,将不能理解的部分重新学习。通过本题,我还接触到了些之前没有接触到的知识点,拓宽了我的知识面,当我遇到问题时,我开始寻找简便方法去解决我所面临的问题,使我的代码更加简洁。
2、 农夫过河
类图:
解释:
由图可见,本题使用了多个类,多个方法体,其中有三个抽象类,多个子类继承三个抽象类,将抽象类中的抽象方法具体化,当主类调用时只需调用抽象类即可。
本题中,我提取出了 AbstractGame 抽象游戏类,该类控制游戏主程序的进行。
还提取出了 AbstractRule 抽象规则类,该类主要写了游戏规则,如游戏继续的规则,判断是否已经过河的规则,以及判断该物品是否存活的规则,当用户输入带过河的物品后调用该类,对于农夫是否能将其带过河、带过之后河两岸的物品是否还能存活,以及带过河后该有是否胜利或失败,进行逐一判断,以保证游戏的可用性。
以及 MaterialObject 抽象物品类,该类定义了所有物品的基本属性以及方法,在主类中调用所有物品时只需声明该类即可。所有物品(船、人、动物和植物)继承了该类,并将该类中的抽象方法具体化。
心得:
本题相较于上一题较为简单,结构较为清晰,无多个类相互调用的复杂情况,考察知识点较为基础,更易于我对于基础知识的查缺补漏,做起来相较于电信计费更加得心应手,且农夫过河游戏做完后还可自己使用,具有趣味性,只可惜当前正处于期末周,故JavaFX做出的界面于我而言并非十分满意,今后会依据兴趣将该程序继续完善。
三、 踩坑心得
1、 电信计费
首先一大问题为正则表达式,因该程序涉及多种输入情况,故我写了多个正则表达式分别与不同情况相对应。不仅如此,用户在一行中输入的信息较为丰富,且不同信息对应的形式也不同,尤其是时间,需考虑到不可超过十二个月,不同的月份不可超过该月份对应的日期,不可超过二十四小时,不可超过六十分,六十秒,此项工作极为繁琐,故于我而言这里为一大难点,下次可更仔细地研究正则表达式,寻找出更适合题目要求的方法。
其次一大问题为计算用户通话所产生的费用,因用户通话包含市内、省内、省外,且接电话与打电话费用不同,不同用户类型所产生的费用不同,除此之外,还要考虑到手机发送短信的情况。故我需要先将用户通讯记录提取出来,再根据该记录找出其对应的计费方式,调用计费方法,统计出该月产生的费用。
最后一大难点为理解程序结构的难点,在刚开始做该程序时,仅看部分类图以及大篇文字,我并不能完全理解该程序的结构,而后我开始请教同学,并结合自己理解,最终摸清了本题中不同类之间的关系,最终才完成了本题程序的编写。
2、 农夫过河
本题并无很大困难,相较于电信计费而言,本题更多的是阶段性的困难。
首先第一阶段的困难是未能完全知晓本题的结构,导致所有数据随意传来传去,无条理性。
而后,增加了一种游戏方式,刚开始未能了解新玩法的规则。之后,明确了新规则,便开始考虑如何才能让代码变得简洁明了,减少代码的重复性,故我使用了if判断用户选择的是哪一种玩法,仅修改两种玩法的区别之处。
之后,增加了继承与多态,所有代码均需重新书写,这对于刚学习继承与多态的我而言还是有一定的难度,但是当我再一次仔细研究后,我发现了其中的简便之处,最终得以将程序完成。
最后,便是JavaFX的运用,之前从未运用过,导致上手有些许困难,最终界面做得并非十分完整。
四、 改进建议
1、 电信计费
第一次作业完成得十分不理想,未按照所给类图进行设计,可以后期继续改进。正则表达式将用户输入类型限定得过于刻板,可以根据题目要求适当将正则表达式变得宽松一些,对于时间输入格式的检验可以用data类进行验证可更加准确。
2、 农夫过河
这一个实验的JavaFX的界面做得很不好,我可以在原有基础上插入图画使界面变得生动有趣,而且过河的画面也可做成动态的,如此也会增加该实验的趣味性。当一局游戏结束后还可增加一个选项,使游戏重新开始,增加此功能可以使用户体验更加完整。
五、 总结
这两次的题目不仅考察了我们的数学思维,有利于我们总多方面认真思考问题,还由浅入深地考察了继承、多态以及接口的相关知识。这些知识点作为Java中最基本也是较为难懂的部分,十分值得我们进行深入学习。还有JavaFX也有极大作用,亦十分值得我们认真学习。通过这两次的题目,我知道了自己知识中的盲点在何处,明确了今后的学习方向,受益匪浅。
标签:10,过河,知识点,通话记录,16,用户,BLOG,计费,本题 来源: https://www.cnblogs.com/zhongxia10/p/16385281.html