标签:好的 info 16px 排序算法 结构 com png split 不能
关于第二个月学习Java总结与反思
一、前言:
1.知识点:
题目集四中涉及到的知识点有,类的继承,子类对父类方法的重写,子类继承父类的方法和属性,类的聚合使用,正则表达式的使用;
题目集五中涉及到的知识点有,split的分隔运用,插入排序、选择排序及冒泡排序三种排序算法的运用,正则表达式的运用,matcher的匹配运
用,Map接口的运用,Set接口的运用,类的聚合运用。
题目集六中涉及到的知识点有,训练正则表达式的各种运用,类的继承和多态使用,接口的使用。
2.题量:这个月的三次题目集的题量我认为是比较少的,每一次都是三到四题,最多的一次也只有六道题,在老师规定的时间内完成是没有问题的。
3.难度:三次题目集总体的难度算是适中了,因为每一次的题目集都会有简单的题目也会有一道比较复杂的题目,中和一下难度也就是适中吧,绝
大多数题目都能在读懂题目后有了思路,然后将其编写出来。
二、设计与分析:
1.题目集4(7-2)、题目集5(7-4)两种日期类聚合设计的优劣比较:
题目集4(7-2)中的设计:
从类图中可分析出:题目集4(7-2)中的设计,是在Year,Month,Day三个类中判断从主方法中输入数据的合法性,并且在这三个类中进行年月日的换算,得到
最后的年月日的结果;其他所以功能都是在DataUtil中实现,像判读输入的两个日期是否相等,比较输入的两个日期的大小,求两个日期之间的天数等;总的来说
就是将数据传入然后基本上所有要实现的功能都在DateUitl类中编写函数去实现的。但是这道题的设计一层一层递进的。
然后现在看一下题目集5(7-4)的类图设计:
而题目集5(7-4)中的设计就恰恰不同,虽然它也是基本上所有功能都是在DataUtil类中实现的,但是它的类结构却不是层层递进的,而从DataUtil类出发,分块到
年月日三个类中得到结果。总的来说就是第一次日更有层次,第二次日期题各个模块更独立,类与类之间关联性更低一些。
②题目集4(7-3)、题目集6(7-5、7-6)三种渐进式图形继承设计的思路与技术运用(封装、继承、多态、接口等):
这三个题目集都涉及到了封装和继承,不同的是题目集六的两道题中包含了多态和接口这两个知识点。
通过复杂度分析和类图结构分析发现,这三道题目的类设计的结构和程序的复杂程度都在不断增加。
题目集4(7-3)涉及到最主要的知识点便是子类对父类的继承,设计思路便是编写一个父类然后在父类中放一个共有的返回面积的方法,子类通过继承将父类中的共有方法继承和
重写然后返回所求图像的面积。技术运用的话也是很简单,编写创建父类的代码,再在父类中编写求面积的公有方法代码,用以给子类进行继承和重写。
题目集6(7-6)涉及到的最主要的知识点便是对于接口的简单运用,设计思路也很明确便是创建一个接口,在接口里面放置一个求面积的方法,然后其他类通过连接这个接口重写
接口里面的方法来返回所求图像的面积。技术运用的话,先是编写一个接口,再编写接口里面求面积的方法,其他类通过访问这个接口调用并重写求面积方法,最后返回面积值。
题目集6(7-5)相当于是前两个题目结合起来的升级版,主要涉及的知识点也多了很多,例如,利用ArrayList对对象进行排序,通过创建一个抽象类然后在这个类中放置求图形面积的
方法,判断图形数据是否合法的方法等。其他子类通过继承这个抽象类,来调用并且重写这个抽象类里面的方法。
③对三次题目集中用到的正则表达式技术的分析总结:
题目集4(7-1) 水文数据校验及处理 这道题涉及到了正则表达式对字符串处理,我认为这道题目对正则表达式的训练比较简单但对于对字符串的处理算是比较全面的了,这里面涉及到了用正则表达式
主要就是对特定格式的字符串进行模块化的提取分割。将一穿很长的字符串拆分成好几个部分,然后对每个部分进行相应的处理和判断,然后将处理好的每个部分在连接起来成为答案需要的格式。题目
集5(7-4) 统计Java程序中关键词的出现次数 这道题目也涉及道了正则表达式的运用,这道题比上一道题目我认为对正则表达式的训练还要更全面一些。因为这道题目中不光涉及到了用正则表达式去
匹配还要去对一些字符去清除然后还要对特定一些字符串进行删除等等。
题目集六中的涉及正则表达式的几个题目就相对来说比较简单,只有对数字和字母的匹配,唯一比较之前多的一些知识,应该就是对所匹配的数字进行个数上的限制,例如第一道正则表达式
训练题中就规定了不得超过15位,所以就需要再匹配后面加上{4,14}这个部分。其它几题基本上也都是大同小异了,就是稍微改了下数字什么的。
④题目集5(7-4)中Java集合框架应用的分析总结
首先先来看下这道题目的复杂度和类图结构
这道题我的框架构思就是将53个JAVA关键字存入字符串数组中,然后利用正则表达式去匹配所有非字母的符号,例如逗号,感叹号,大于小于号等等。将要检查的代码一行一行的输入,对每一行
输入的代码字符串进行处理,去掉注释,代码中的字符串,和特殊符号。将这些去掉后,用一个空格代替他们原来的位置,然后将这些字符串一行一行的连接起来,这样的话,到后面就能得到一个
代码处理好后接起来的一个长字符串。最后以空格为分界将这个长字符串分割成一个一个的单词,然后就用一个循环去逐一匹配字符串数组中的关键字。
匹配到后就利用Map接口中所带的函数去获取关键字出现的次数,处理完后套用一个循环将出现的关键字和次数输出。
三、采坑心得:
1.题目集四(7-1) 水文数据校验及处理
这是我踩得的第一个坑,当时这道题目本来是应该设计好框架,然后写出对应的类进行模块化处理。但是当时可能是因为觉得题目比较跟之前写过的一元多项式求导的题目很相识,
认为这就是一个简单的字符串处理,导致我没有去设计类来编程,以至于当我把代码写完后,还是有很多测试点没通过。然后我就接着对代码进行修改,这个时候麻烦就来了。因为
没有把代码模块化,导致当我改了一个地方另一个地方有出现了错误,感觉就是牵一发而动全身。这个时候就发现代码非常的乱,修改要花费大量的时间。所以在以后写代码,一定
要进行类的框架设计,这样不单单是到后面修改方便了,而且复用性也增强了。
然后第二个坑就是题目集五(7-5) 日期问题面向对象设计(聚合二)这到题目,咋一看这道题与之前题目集四(7-2)很相似,除了类的设计不同之外,其他求结果的方法
和算法基本上是相同的。所以说当我把代码编写好提交,发现有一个点,不管我怎么弄都过不了。当时一直不明白那出错了。因为当时我一直觉得年份往回推一个是不能为负数的
吧,所以就一直兜圈子,最后我就决定试试结果年份可以为负数的情况,然后一试就通过了。当时真的是觉得非常的懊恼,感觉就是浪费很多时间在一个小问题上。不过这个错误也
让我意识到,很多时候我们对待问题的思维要开阔,不能固化,或者说是要勇于去尝试一下,就像当时的我,如果早点去尝试这种情况的话,就不用浪费那么多时间了。
最后一个坑就是题目集五(7-4 )统计Java程序中关键词的出现次数这道题。
这三处错误到最后也没能找到,就像第一个错位,我已经将注释去掉了,但不知道为什么还是通过不了,测试了很多数据,都能得到正确的数据。花了很多时间没找到错误,确实是很难受。
第二个错误,在我第一次提交时能够通过,但是当我代码进行了改进和优化时却反而错了。之后也是测了一些数据也都能过,到最后还是没能改正。很是遗憾。
四、 改进建议
最需要改进的应该还就是题目集四(7-1) 水文数据校验及处理这道题了,就像我之前说的一样,这道题目没有进行类框架的设计,导致代码没有模块化,修改起来非常的吃力。
而且修改的时间也是花费很多。所以之后的题目,无论是难是易都要将代码类的机构框架设计好,代码的层次分明,将整个代码模块化,将每个类的单一职责原则进行到底增加
代码的复用性。
五、总结
这个月的三次题目集锻炼一方面是提高了编程的设计和编写能力,像两次关于日期的题目,通过类图设计代码,这就锻炼了我们对编程设计方面的能力,让我对编写代码的层次
性更加有更深的理解。并且对于类与类之间的关联有了更熟悉的认识。
然后就是三次图形继承的题目,通过三次层层递进的代码编写,让我对封装、继承、多态、接口等运用的更加熟练,理解也更加深刻,不再像最初那样编写代码时有些畏手畏脚的。
最后就是训练了对正则表达式的运用,这个月的三次题目集每一次多有对正则表达式的训练。总的来说就是把一些基本的操作运用的越发熟练了。
然后建议的话也没什么,我觉得现在这个学习模式很适合现阶段的学习。
标签:好的 info 16px 排序算法 结构 com png split 不能
原文地址:https://www.cnblogs.com/mystudy666/p/14725271.html