第二次Blog作业
(1)前言:
三次题目集中涉及到了很多知识点,其中有正则表达式,类的继承,聚合,字符串长度的比较,数组的合并,排序,关键字的查找,接口和类的多态性。第四次题目集有三题,第五次有五题,第六次有六题。题目有难有易,都是一些简单的题中加一道难度稍大一点的题。
在第四次题目集中主要涉及到了正则表达式的校验,类的继承,和聚合,虽然题目量只有三道题,但却感觉是这三次题目集中最难的。
在第五次题目集中主要有数组的排序与合并,也有着聚合和正则表达式的校验,而这里的正则表达式中涉及到了正则表达式的分割和查找,还有这正则表达式的替换。
在第六次题目集中大部分题目都是正则表达式的校验,只有在后面两道题目中涉及到了类的继承,多态性和接口。
(2)设计与分析:
题目集4(7-2)

和题目集5(7-5)

这两道题中用到的方法基本上是一样的,就只是方法中用到的参数不一样,都是根据题目中给出的方法来编写的。而如果要比较的话,我觉得题目集4(7-5)可能会有更好一样,没测试的结果中就是题目集4 (7-3)的运行时间更短,不过在内存方面就是题目集5(7-5)占用的更少,而且题目集(7-5)的代码也要更短一些。这样一比较的话,感觉两者各有各的好处吧。
题目集4(7-3)

题目集6(7-5)

题目集6(7-6)

这三道题目中题目集4(7-3)和题目集6(7-5)中用到的都是子类继承父类,都是先在父类中写入抽像方法,然后在子类中对这些方法进行重写;而在题目集(7-6)中用到了接口,也是在接口中写好抽象方法,然后进行重写,但在这道题中是通过接口来调用重写的方法;在这三道题目中都实现了封装性,而在题目集6的两道题目中更是都实现了多态性,所谓的“多态”,简单的理解就是对象在不同情况下的不同表现,具体体现在定义和功能两个方 面,简单的总结一下,多态可以用“三个定义和两个方法”来总结。三个定义分别是父类定义子类构 建、接口定义实现类构建和抽象类定义实体类构建,而两个方法分别是方法重载和方法重写。而在这道题目中我们采用的是抽象类定义、实体类构建的方式。
三次题目集中都用到了正则表达式,在题目集6中的正则表达式都只是一些简单的检验,只要编写正确的正则表达式就行了,没什么难度;题目集5中的正则表达式中需要用到查找和分割,通过查找找到所需的东西,然后再通过分割将不需要的东西删除;题目集4中的正则表达式跟题目集5中的差不多,也是查找和分割。这个次的正则表达式对于自己的训练有着很好的帮助,让自己更加熟练的掌握了正则表达式的定义和比较,关于正则表达式的方法也可以更好的运用。
在题目集5(7-4)中有一个关于java中关键字的数组集合,其中的关键字的排序都是排好再输进去的,就不是电脑自己进行的排序,下次的话希望顺序是随机的,然后通过自己编写的代码让电脑能自动对其进行排序。而在ArrayList中运用到了自动排序的方法
(3)采坑心得:
在进行数据的测试的过程中经常会出现,数组的长度超出的问题,这主要是因为在数组中运算的时候总是会超出数组的长度,然后就导致报错了;在题目集六的(7-5)中会忘记了将图形数量非法相关的代码写进去,然后就总是过不了第一个测试点,后来在进行第一个测试点的编写的时候不管将判断放在哪里都起不到作用,后来还是因为先将其他的代码写完之后来测试才过的,我自己至今都还是不太明白之前为什么没有过那个测试点,为什么其他代码写完之后就可以过第一个测试点了;在题目集六(7-6)中会忘记了运用到多态性;在题目集五(7-4)中关于注释的代码中的关键字不给予计算,再用正则表达式对注释符进行匹配的时候,总是会将不需要删除的信息给删除,而且对于两种不一样的注释符一起运用时做不到不同的匹配和分割方法,就是说每次都只能对一种注释方法进行匹配,两种注释方法一起运用时就会出现错误;在题目集4(7-1)中正则表达式的运用出现了误差,虽然在最开始的时候可以很好地对输入进行匹配和分割,但在最后的日期这一块出现了问题,因为最开始就将输入中所有的空格都去掉了,然后最后在在对月份和时间的分割中出现了错误,会将时间分割错误,最后还是用开始不去括号,再将分割好的数据存入数组的时候对其他的数据进行去括号,而日期这一项不进行去括号,这才使得结果没有错误。
(4)改进建议:
题目集四(7-1)中
int year = Integer.valueOf(time1[0].replaceAll("\\s*",""));
int month = Integer.valueOf(time1[1].replaceAll("\\s*",""));
int day = Integer.valueOf(time1[2].replaceAll("\\s*",""));
int shi = Integer.valueOf(time2[0].replaceAll("\\s*",""));
int fen = Integer.valueOf(time2[1].replaceAll("\\s*",""));
这些代码中的去括号可以在数组的时候用循环直接去掉,而不用这样一个一个写出来
题目集六(7-4)中
编写的正则表达式的用来匹配的正则表达式太过于复杂
Pattern p = Pattern.compile("^2020(1[1-7]([0-3][1-9])|(40))&|^2020(61([0-3][1-9])|(40))&|^2020(7[1-3]([0-3][1-9])|(40))&|^2020(8[1-2]([0-3][1-9])|(40))$");
可以先匹配前面一些数据,然后将输入做不同的分类,最后在的方法中进行输入的验证。这样正则表达式就不会显得太复杂。
(5)总结:
这三次题目集中学习到了很多,在这三次题目集中对于正则表达式进行了很多的练习,更加熟练地掌握了正则表达式的使用和关于正则表达式方法是使用,然后对于类的继承也基本掌握,还学习到了接口和多态性;经过这三次题目集的试炼,知道了自己对于多态性和接口的掌握不是很好,需要进一步的学习,对于老师的建议还是觉得上课的时候不要一味的讲,感觉这样不是很能听得下去,会感觉很枯燥。

浙公网安备 33010602011771号