第二次博客作业
第二次博客
(1)前言:
- 题目集四的知识点:
1)正则表达式对实际问题的处理
2)类的聚合关系(日期的聚合)
3)类的继承(图形之间的继承)
4)子类继承自父类,子类可以对父类的方法进行重写(Override);
5)子类继承父类用extends关键字来实现,语法为class 子类 extends 父类{}
6) 保留两位小数可以使用String.format(“%.2f”,a);
题目集五的知识点:
1) split()的使用方法,split对字符串以给定的字符进行分隔,例如str.split(“ ”);可以将字符串str中的空格分隔;
2) 练习了3种排序方法的使用,插入排序,选择排序,冒泡排序;
3) 日期的第二种聚合关系,在DateUtil创建Day,Month,Year的对象,
4) System.exit(0);可以直接退出程序;
题目集六的知识点:
1)boolean find = str.matches(pattern);可以用于判断str与pattern是否匹配;
2)Arrays类里的Arrays.sort();可以进行排序;
3)toCharArray() 方法将字符串转换为字符数组;
4)List<Shape> list = new ArrayList<>();
需要 import java.util.ArrayList;
list列表存储的是Shape类型的对象,
list.add();用于往list里添加Shape类型的对象;
list.get(i);用于获取第i+1个元素;
5)Collections.swap(list,j,j+1);用于交换list列表里的下标为j和j+1的元素;
需要import java.util.Collections;
6)System.exit(0);用于退出程序
7)对象数组的创建,例如:Circle cir[] = new Circle[a];
8)接口的基础运用;
难度:
1.题目集四对我来说很难,题目集四的第一题就是用正则表达式来对水文数进行校验,正则表达式一直没有学明白,或者说学的不认真。而在写题目集4的时候没有理解聚合关系,导致这次题目集只那了一点分。
2.题目集五有一定的难度,统计Java程序中关键词的出现次数这一题目,看了就让我头大,也是自己的原因,学的不好。日期的聚合二对我来说有一定的难度,最后是有一个点没通过,是自己算法的问题。
3.题目集6难度较之前有些下降,终于拿了满分,虽然时间是最后一天完成,主要是图形继承与多态这题卡了我有点九,最后是理解了将对象存入列表才做出了的。
(2)设计与分析:
①题目集4(7-2)、题目集5(7-4)两种日期类聚合设计的优劣比较
题目集4(7-2)的类图和报表内容


题目集5(7-5)的类图和报表内容






分析:题目集5(7-5)的聚合关系更好,从代码复杂度上看,题目集5(7-5)的复杂度远低于题目集4(7-2)的代码复杂度。题目集4(7-2)的代码中各部分关联较大,一旦某一个类出错,最后的结果都会受影响。第二,题目集4(7-2)的引用过于复杂,例如:
引用次数过多,代码可读性差。
②题目集4(7-3)、题目集6(7-5、7-6)三种渐进式图形继承设计的思路与技术运用(封装、继承、多态、接口等)
题目集4(7-3)的报表内容和类图:


分析:本题是实现图形类的继承,共七个类,Shape为父类,我是先写Shape类,因为Shape类最简单,只有一个求图形面积的方法,然后在按照题目的顺序写其他类,在其他类里用Override对求图形面积的方法实现重写,这也是多态的一种表现方法,题目已经明确给出各个类之间的继承关系了,最后在写Main类。
题目集6(7-5)的报表内容和类图:


分析:这题我是花了比较多的时间的,我一开始对实验指导书里的:要求创建的各个图形对象均存储在 ArrayList<Shape>类型的列表中,这句话不怎么理解,以至于我是直接创建ArrayList<Double>的列表,因为我那个时候不知道怎么将各个图形的对象存入ArrayList<Shape>的列表中,再用ArrayList<Double>列表写完后发现这样提交回是零分的,然后在网上查怎么存储自定义对象的列表,最后在写代码的时候,我是将各个对象的对象数组存入了ArrayList<Shape>列表,我的排序方法以及求得所有图形面积总和的方法都设计在了Main类中。而在排序的时候,也遇到了问题,就是Arrays类的sort方法不能使用
然后我就尝试解决 Arrays类的sort方法的问题,最初是按照eclipse里修改建议来修改,但是不能解决这个问题;反而出现了其他错误;

最后是用Collectiongs类的swap(list,i,i+1);方法来解决的,改方法是用于交换list列表里俩个元素的位置,用冒泡排序进行排序。
题目集6(7-6)的报表内容和类图:


分析:本题的重点是接口,我一开始也不了解接口是什么,是通过查找资料了解的,接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。
接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。
在了解了接口是什么,这题也就很好做了,按照题目要求来就行了。
③对三次题目集中用到的正则表达式技术的分析总结
题目集4(7-1)的水文数据校验及处理题目,数据处理复杂,自己没有写出来
题目集5(7-4)的统计Java程序中关键词的出现次数,相关知识学习不到位,没有写出来
题目集6(7-1~7-4),题目较为简单,都是一些基础的正则表达式训练的题目,匹配字符串和校验,很容易就写出来了。
④题目集5(7-4)中Java集合框架应用的分析总结
在java中,集合就想让与一组类型相同或者异同的对象或者基础数据的集合。而题目集5(7-4)中则是对一段代码进行统计关键字的次数。
(3)采坑心得:
- 在题目集5-7-5中,我在每一种输入方式中都有四个输入或者更多,总计有10多个输入,虽然在Eclipse上有输出,但在PTA上却没有输出,在CSDN查找解决方法发现PTA上只能创建一个Scanner类,反复创建会没有输出




- 在题目集5-7-5中,下n天的最大值测试和前n天的最大值测试一直超时

一开始我以为是网络问题的原因,后面我把输入的天数m的类型int改为long就没有超时了


3.在题目集6-7-5中,对于list列表的排序,我一开始是想用Arrays类里的sort进行排序的,当自己使用Arrays.sort(list);的时候,却出现了 类型数组中的方法sort(int[])不适用于参数(List<Shape>)的问题;

我一开始是按照eclipse里修改建议来修改,但是不能解决这个问题;反而出现了其他错误;

之后,我又重新看了这题的实验指导书,排序方法可自行选择,冒泡排序、插入排序、选择排序等均可;
我开始尝试用冒泡排序,但却显示 :赋值的左侧必须是变量;类型不匹配:无法从double转换为int;两个错误;这还是不行,我看到了提示:Collections类,然后就去学习相关的Collectiongs类的知识,
Collectings类里也有Sort的方法:sort(Collection)方法的使用(含义:对集合进行排序),但还是不行,报错和Arrays.sort一样。


后面继续学习Collections类的方法,swap(List list,int i,int j)方法的使用(含义:交换集合中指定元素索引的位置),这样就可以对list列表里的元素进行排序了

对列表里的元素进行排序,花了我不少的时间,原因有很多,第一,自己对Arrays类的方法不熟悉,第二对list列表也不熟悉,第三自己也没有认真看实验指导书,忽略了一些提示,走了一些弯路。
(4)改进建议:
1.

排序的改进:

(5)总结:
1.学会了Arrayslist列表的使用,在之前听老师讲Arrayslist的时候,觉得好高级,很难看懂,现在回过头来,发现Arrayslist列表的基本用法十分简单。
2.继承进一步的了解,做了2道继承的题目。
3.接口的初步了解,接口是解决Java无法使用多继承的一种手段。
4.聚合关系的初步掌握,我在题目集4的7-2(聚合一),是没有写出来的,而在
题目集5-7-4(聚合二)对聚合关系有一定的理解,虽然花了较多的时间。
5.自己还是对正则表达式的学习不够,简单的题目会做,一旦难一点的题目就无从下手了。
课程:
1.周三的课对于我来说,有点多,那天是从早上上到晚上9点20.自己有点吃不消,不过老师讲的课还是很有趣,经常跟我们讲道理嘿嘿。不过习惯了就好了,想想高考的时候都坚持过来了,
周三这点课还算什么呢。

浙公网安备 33010602011771号