第二次博客作业

第二次博客

(1)前言:

 

  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)采坑心得:

  1. 在题目集5-7-5中,我在每一种输入方式中都有四个输入或者更多,总计有10多个输入,虽然在Eclipse上有输出,但在PTA上却没有输出,在CSDN查找解决方法发现PTA上只能创建一个Scanner类,反复创建会没有输出

 

 

 

 

 

 

 

 

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

 

 

 

 

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

 

 

 

 

 

3.在题目集6-7-5中,对于list列表的排序,我一开始是想用Arrays类里的sort进行排序的,当自己使用Arrays.sort(list);的时候,却出现了 类型数组中的方法sortint[])不适用于参数(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.自己有点吃不消,不过老师讲的课还是很有趣,经常跟我们讲道理嘿嘿。不过习惯了就好了,想想高考的时候都坚持过来了,

周三这点课还算什么呢。

 

 

posted @ 2021-05-02 23:25  无心yg  阅读(76)  评论(0)    收藏  举报