总结性blog

                                                                                                                                                                  总结性blog


前言

1.第一次大作业主要考察Java的基本语法、整型.实型数据的处理和选择语句的综合使用、数组的运用以及一些基本的字符串的运用。题量比较大,但是题目总体比较简单,每道题大概用时半个小时。

2.第二次大作业主要考察字符串的运用,尤其是对charAr和substring的运用。题量不大,难度总体适中,第二道题是难度最大的,需要一些时间去理解,但从思路上理解起来很清晰,每道题大概耗时三/小时左右。

3.第三次大作业主要考察对字符串的处理能力和正则表达式的应用、自定义类,并且调用类里的各种方法、方法之间参数传递。题量不大,只有三道题,但是题目比较难,每道题基本上都要耗上一整天。

4.第四次大作业中主要考察的是类的设计,调用类里的各种方法以及增值表达式的运用,总共三道题,7-1、7-2的难度适中,花费的时间大概每道题半小时。7-3中点线性系列中关于对凸四边形的计算难度比较大,耗时很久,花了几天都没有弄到满分,其中对于数学的计算比较令人头疼与难以理解。希望自己以后能解决好图形类的题目叭!

5.第五次作业是前几次作业的升级版,为凸五边形的计算,共为两道题,难度比较大,基本上每道题要耗上一整天。主要考察的是类的设计,调用类里的各种方法以及增值表达式的运用,其中中点线性系列中关于对凸五边形的计算难度比较大,耗时很久,花了几天都没有弄到满分,其中对于数学的计算比较令人头疼与难以理解。希望自己以后能解决好图形类的题目叭!这几次关于图形的题在内容上大同小异,但是其中的数学计算都比较难,不过对自己的能力也达到了一个很好的提升!

6.后面的三次大作业难度比较小,这三次大作业相对于,前面的pta大作业算法上比较简单,但是后面三次大作业逻辑上比较难,但是经过后面三次的大作业的完成,知道了怎么面向对象,虽然要建立很多类,但是这样管理起来更方便,修改起来,或者添加功能也更加的方便,不用去大段的修改代码,也避免了大量的代码重复。同时,对于其他那些看代码的人也可以很好的看懂,也更直观。电信系列的大作业主要涉及了容器的知识,对信息的储存和便利,同时还考了容器内部排序,通过Collections函数进行排序,也通过对不同的用户进行不同的分类,放在不同的容器中。当然,其中也还涉及到子类、父类,分类,类的创建,类的管理,正则表达式等等。难度相对于前几次的大作业来说,这三次的大作业难度还是相对比较低的,因为老师需要捞我们,所以pta的难度出的不大,但是前两次没有拿到满分,主要是正则表达式出问题了,但是一直找不到问题出现在哪里。这三次大作业也涉及到了Data的应用,对于Data的应用对我来说当时是一片空白,但是我通过查找资料,来找到相应的方法。

7.期中考试一共有三道题,题量不大,三道题是一个渐进的过程,其中第一道题最为简单基础,最后一道题最难。每道题都有给设计类图,按照设计类图完成编程。题目总体来说不太难,思路比较清晰,但是因为我的基础不太扎实,所以我在期中考试中并没有拿到满分。每道题大概费时半个小时,其中我关于容器类的掌握不够扎实,导致我最后一道题并没有拿满分。今后一定要稳扎稳打,将自己的面向对象程序设计的能力提高,不要再出现简单的题目写不出来的情况了。

8.目前做了五次实验,实验的难度总体偏大,每次实验都要写好几天,但是能够很好的锻炼自己的编程能力,很好的巩固自己所学的知识。通过这次学会了Javafx的使用,实话说,感觉这里蛮难的,里面好多方法的使用都要去学习,去琢磨,通过查阅资料,浏览他人优质的代码去学习,去改进,整个实验进行的很曲折,功能也有些不完善,但是总体而言还是收获很大的,javafx里面的按钮事件驱动机制、lambda表达式等等,还有很多值得去学习。通过这次学会了Javafx的使用,感觉这里蛮难的,就跟这个学期初刚接触ege一样,需要学习大量的相关方法,耗费的时间成本很大。但是这次的经理也同样增加了我对Java实际应用的认识,明白了自身能力的不足。总而言之,这次试验的学习很累但是学习到了很多。

设计与分析

第二次大作业——7-2 串口字符解析

1.思路

1.通过charAt的运用对字符串进行分析,

2.判断空闲、起始、结束以及奇偶校验位的数字是否存在和正确,

3.用if语句再对相应的情况进行不同的分析,输出不同的结论。

2.重要代码分析

判断无起始点且数据数不足时的情况

1
2
3
4
5
6
7
8
9
1     for(int i=0;i<number.length();i++)
2             {
3                 if(number.charAt(i)=='0')
4                 {
5                     sum=1;
6                 }
7             }
8             if(sum==0||number.length()<11)
9                 System.out.println("null data");

 其他的情况用if语句和for循环的嵌套依次实现

3.度量分析

 参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图

 4.心得

优点:判断条件清晰,可修改性高。

缺点:使用的if - else 语句较多,导致代码结构复杂。

 

 

第三次大作业——7-1 点线形系列1-计算两点之间的距离

1.思路

1.通过正则表达式判断输入是否正确,

2.如果正确,然后在判断tokens【0】,

3.如果tokens【0】==一个数,进入判断语句,

4.如果长度不等于他的长度,就输出wrong number of points或者wrong format。

2.重要代码分析

1.判断输入的坐标格式是否正确 

for(int i=0;i<number.length();i++)
2     {
3         if((number.charAt(i)=='+'||number.charAt(i)=='-')&&(number.charAt(i+1)=='+'||number.charAt(i+1)=='-'))
4         {
5             System.out.println("Wrong Format");
6             n++;
7         }                                                                                                                                                                                         

2.计算两点之间距离

复制代码
1 class cal{
2 2     public static void length(double x1,double y1,double x2,double y2) {
3 3         double l=0,l1;
4 4         l1=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
5 5         l=Math.sqrt(l1);
6 6         System.out.println(l);
7 7     }
8 8     
9 9 }              
复制代码

 

3.度量分析

4.心得

1.类方法的定义都很清晰,所用到的 if - else 语句较少,圈复杂度较低。

2.用正则表达式判断可简洁代码,少走弯路。

3.字符串的应用在题目中有重要作用。

 

 

第三次大作业—— 7-2 点线形系列2-线的计算

1.思路

1.通过正则表达式判断输入是否正确,

2.如果正确,然后在判断tokens【0】,

3.如果tokens【0】==一个数,进入判断语句,

4.如果长度不等于他的长度,就输出wrong number of points或者wrong format。

 

2.重要代码分析

1.提取坐标点

class judged1{
2     private static String df= "[1-5]:([+-]?\\d+(\\.\\d+)?,[+-]?\\d+(\\.\\d+)?\\s?)+";

 

 2.判断点的个数,得出不同的结论

复制代码
复制代码
 1 public static void judge1(String number,String[] tokens) {
 2         Double n = Double .parseDouble(tokens[0]);
 3         if(tokens.length==5&&number.matches(df)&&n==1){
 4             twopoints.tow(tokens);
 5         }
 6         else if(tokens.length!=5&&number.matches(df)&&n==1)
 7             System.out.println("wrong number of points");
 8         else if(tokens.length==7&&number.matches(df)&&(n==2||n==3)){
 9             threepoints.three(tokens);
10         }
11         else if(tokens.length!=7&&number.matches(df)&&(n==2||n==3))
12             System.out.println("wrong number of points");
13         else if(tokens.length==9&&number.matches(df)&&(n==4||n==5)) {
14             fourpoints.four(tokens);
15         }
16         else if(tokens.length!=9&&number.matches(df)&&(n==4||n==5))
17             System.out.println("wrong number of points");
18         else
19             System.out.println("Wrong Format");
20     }
21 }
22 class twopoints{
23     public static void tow(String[] tokens) {
24         Double n = Double .parseDouble(tokens[0]);
25         Double x1 = Double.parseDouble(tokens[1]);
26         Double y1 = Double.parseDouble(tokens[2]);
27         Double x2 = Double.parseDouble(tokens[3]);
28         Double y2 = Double.parseDouble(tokens[4]);
29         double k=0;
30         k=(y1-y2)/(x1-x2);
31         if(n==1)
32         {
33             if(x1-x2==0)
34             {
35                 if(y1-y2==0)
36                     System.out.println("points coincide");
37                 else
38                     System.out.println("Slope does not exist");
39             }
40             else
41                 System.out.println(k);
42     
43         }
复制代码

3.度量分析

参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图

4.心得

1.对字符串的处理能力和正则表达式的应用、自定义类,并且调用类里的各种方法、方法之间参数传递的运用更加熟练。

2.了解到数学能力对Java解题的重要性!

3.自己的逻辑思维得到锻炼

 

第四次大作业——7-2 点线型系列4—凸四边形的计算

1.思路

 1.通过charAt的运用对字符串进行分析,

 2.判断空闲、起始、结束以及奇偶校验位的数字是否存在和正确,

 3.用if语句再对相应的情况进行不同的分析,输出不同的结论。

2.重要代码分析

1.//判断是否为四边形

复制代码
class Judge2{
 2 
 3 public static boolean judge2(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4){
 4     double[] core;
 5     core=nodical.nod(x1, y1, x4, y4, x3, y3, x2, y2);
 6   if ((y4 - y3) * (x4 - x2) == (y4 - y2) * (x4- x3))
 7          return false;
 8   else if ((y4- y3) * (x4 - x1) == (y4 - y1) * (x4 - x3))
 9     return false;
10   else if ((y4 - y2) * (x4 - x1) == (y4 - y1) * (x4 - x2))
11     return false;
12   else if ((y3 - y2) * (x3 - x1) == (y3 - y1) * (x3 - x2))
13     return false; //任意三个顶点成直线,非四边形
14   else if((y1-y2)*(x3-x4)-(y3-y4)*(x1-x2)==0&&(y2-y3)*(x3-x4)-(y3-y4)*(x2-x3)==0)
15     return false;
16   if(( ((core[0]>x1&&core[0]<x2)||(core[0]>x2&&core[0]<x1)) &&((core[1]>y1&&core[1]<y2)||(core[1]>y2&&core[1]<y1)))&&( ((core[0]>x3&&core[0]<x4)||(core[0]>x4&&core[0]<x3)) &&           ((core[1]>y3&&core[1]<y4)||(core[1]>y4&&core[1]<y3))))
17     return false;
18   else
19     return true;
20   }
21 }
复制代码

 

 2.//四边形判断点是否在四边形内

 

复制代码
 class Judge4{
 2     public static int judge4(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4,double x5,double y5) {
 3         double s1,s2,s3,s4,area,area1;
 4         double l1,l2,l3,l4,l5;
 5         double n1,n2,n3,n4,n5;
 6         l1=length.longth(x2, y2, x5, y5);
 7         l2=length.longth(x2, y2, x3, y3);
 8         l3=length.longth(x3, y3, x4, y4);
 9         l4=length.longth(x4, y4, x5, y5);
10         l5=length.longth(x2, y2, x4, y4);
11         n1=length.longth(x1, y1, x2, y2);
12         n2=length.longth(x1, y1, x3, y3);
13         n3=length.longth(x1, y1, x4, y4);
14         n4=length.longth(x1, y1, x5, y5);
15         area=0.5*l1*l4*triangle.sin(l5, l1, l4)+0.5*l2*l3*triangle.sin(l5, l2, l3);
16         s1=0.5*n1*n2*triangle.sin(l2, n1, n2);
17         s2=0.5*n2*n3*triangle.sin(l3, n3, n2);
18         s3=0.5*n3*n4*triangle.sin(l4, n3, n4);
19         s4=0.5*n1*n4*triangle.sin(l1, n1, n4);
20         n5=(float)(s1+s2+s3+s4);
21         area1=(float)area;
22         if(area1-n5!=0)
23             return 0;
24         else
25         {
26             if(n1+n2-l2==0||n2+n3-l3==0||n3+n4-l4==0||n4+n1-l1==0)//判断点是否在线上
27                 return 2;
28             else
29                 return 1;
30         }
31         
32     }
33 }
复制代码

 

 3.类图

 

 

 

期中考试第一题——点与线(类设计)

1.思路

通过题目所给的类图和题目要求去完成代码,通过对类图的分析我解剖去了解思路,然后完成代码。

2.重要代码分析

关于点的设计

复制代码
复制代码
 1 class Point {
 2 
 3 private double x;
 4 private double y;
 5 
 6 public Point() {
 7 
 8 }
 9 
10 public Point(double x,double y) {
11 this.x=x;
12 this.y=y;
13 }
14 
15 public double getX()
16 {
17 return x;
18 }
19 
20 public void setX(double x) {
21 this.x=x;
22 }
23 
24 public double getY()
25 {
26 return y;
27 }
28 
29 public void setY(double y) {
30 this.y=y;
31 }
32 public void display() {
33 
34 }
35 
36 }
复制代码

 

3.类图

 

 

 

期中考试第二题——7-2 点线面问题重构(继承与多态)

1.思路

通过题目所给的类图和题目要求去完成代码,通过对类图的分析我解剖去了解思路,然后完成代码。

2.重要代码分析

复制代码
Scanner in = new Scanner(System.in);
 2         Element element=new Element();
 3         
 4         double x1 = in.nextDouble();
 5         double y1 = in.nextDouble();
 6         double x2 = in.nextDouble();
 7         double y2 = in.nextDouble();
 8         String color = in.next();
 9         
10         Point p1 = new Point(x1,y1);
11         Point p2 = new Point(x2,y2);
12         Line L1=new Line(p1,p2,color);
13         Plane c = new Plane(color);
14         
15         element=p1;
16         element.display();
17         
18         element=p2;
19         element.display();
20         
21         element=L1;
22         element.display();
23         
24         element=c;
25         element.display();
复制代码

 

3.类图

 

 

期中考试第三题——7-3 点线面问题再重构(容器类)

1.思路

通过题目所给的类图和题目要求去完成代码,通过对类图的分析我解剖去了解思路,然后完成代码。

2.重要代码分析

复制代码
Scanner input = new Scanner(System.in);
 2         int choice = input.nextInt();
 3         double x;
 4         double y;
 5         double z;
 6         double w;
 7         int number;
 8         String color;
 9         
10         
11         GeometryObject g = new GeometryObject();
12          while(choice != 0) {
13                 switch(choice) {
14                 case 1:{
15                     x=input.nextDouble();
16                     y=input.nextDouble();
17                     Point p = new Point(x,y);
18                     g.add(p);
19                 }
20                     break;
21                 case 2:{
22                     x=input.nextDouble();
23                     y=input.nextDouble();
24                     Point p1 = new Point(x,y);
25                     z=input.nextDouble();
26                     w=input.nextDouble();
27                     Point p2 = new Point(z,w);
28                     color = input.next();
29                     Line L = new Line(p1,p2,color);
30                     g.add(L);
31                     
32                 }
33                     break;
34                 case 3:{
35                     color = input.next();
36                     Plane p = new Plane(color);
37                     g.add(p);
38                 }
39                     break;
40                 case 4:{
41                     
42                     number = input.nextInt();
43                     if(g.getList().size()>=number)
44                         g.remove(number-1);
45                     }
46                     
47                 }
48                 choice = input.nextInt();
49             }
50          ArrayList<Element> list = g.getList();
51          for(int i=0;i<list.size();i++) {
52              list.get(i).display();
53          }
复制代码

 

 

 

 

 

 

 

最近三次大作业-------电信计费

因为最近的这三次大作业都比较简单,大部分的题目都能拿到满分,所以我着重分析关于电信计费的那道题

1.思路

1.通过遍历整个字符串获取“函数”中所有特殊字符和字符X的下标,保存于链表中,因为链表可以不需要在一开始声明长度这样可以在面对未知个含X项的函数中也能保存需要的下标。

2.通过正则表达式匹配字符串中的空格(空白),.replaceAll("\\s*", "") 然后使用replaceAll()方法将空格用 “” 代替达到删除空格的效果。

3.通过两个链表分别保存获取到的系数和指数,主要是最近用链表有点上头,java里的链表都是封装好了的,比c语言用起来顺手多了,毕竟add()方法就直接做好了尾接法,get()方法就直接能够返回指定下标的元素。(泛型才是永远滴神!)不过泛型的数据不能直接和int型的数字进行比较,所以我还是选择声明链表的数据类型为Integer类型。

2.重要代码分析

复制代码
abstract class ChargeMode {
    private ArrayList<ChargeRule> chargeRules = new ArrayList<ChargeRule>();

    public ArrayList<ChargeRule> getChargeRules(){
        return chargeRules;
        
    }

    public void setChargeRules(ArrayList<ChargeRule> chargeRules) {
        this.chargeRules=chargeRules;
    }
    
    public abstract double calCost(UserRecords userRecords);
    public abstract double getMonthlyRent();
}
复制代码

 

 

3.类图

 

 

 

 

实验二

思路

 

(1) 对farmer,wolf,sheep,cabbage进行数据封装的改进,将属性隐藏。

(2) 增加Boat(船)类,设计船类的相应方法,并修改main方法中相关的代码,    改进农夫带东西过河的功能,解决之前代码中存在的农夫带东西过河的判断问题。

(3) 为wolf,sheep 两个类添加带Stirng name参数的构造函数,当创建wolf,sheep对象时,假设输入了name参数,程序分别输出:

啊呜~~~我 *name* 狼又回来了

咩咩,我是可爱的小羊*name*

当wolf,sheep对象使用showStatus()方法输出状态时,输出内容要带上name的信息,如:

Sheep *name* is alive :true   Sheep *name* has Cross : false

 

 

类图

 

 

实验三

思路

 

1、将农民、狼、兔子、羊、白菜、胡萝卜都找到一个父类Animal,在Animal添加共有的属性和方法,并以此为基础修改原有的类,使之与添加的f父类构成继承关系。

 

 

 

 

类图

 

 

实验四

 

思路

1、 根据实验步骤中提出的要求,使用eclipse等开发工具编写相应的Java程序;

2、 编译、运行自己所编写的Java程序;

3、 根据编译与运行过程中所获得的错误信息修改程序直至获得正确的结果;

4、 记录实验中遇到的各类问题并以及解决办法。

5、 根据实验步骤中提出的要求,使用eclipse等开发工具编写相应的Java程序;

6、 编译、运行自己所编写的Java程序;

 

类图

 

 

实验五

 

思路

主要改动的一个是Main方法,把按钮的控制等等代码都加到这里面,其次则是class MaterialObject,class Game,主要改动也是因为添加了按钮,剩下的都与实验四的代码差不多。 

 

类图

 

 

 

踩坑心得

第二次大作业——7-2 串口字符解

1.里面对于串口符的加法容易出错,有点+11,有点+10。

 

 

 

第三次大作业

因为第三次大作业的内容大同小异,都是用相同的思路解题,区别较大的是在数学计算上,所以我对这三道题进行一个统计。

我们可以将一些数学计算做一个类,再引用。否则圈复杂度过高,不利于下次迭代和维护。

线与线的sin值和cos值

我们可以将一些数学计算做一个类,再引用。否则圈复杂度过高,不利于下次迭代和维护。其实只写了一下合并同类项,因为怕写得多了反而出错,权衡一下收益并没有深入(然后还是出错了QAQ)
对于每一个表达式,我们如果可以定义其哈希值,那么sin(x)与sin((x^2+1))便显然可以以x和x^2+1作为两个sin的键,其指数作为值,这样键值关系就出现了,便依然可以做到对于每个三角函数迅速找到与其对应的cos^2 sin^2 与 1。于是就可以用类似第二次的方法进行优化。但是考虑到嵌套因子的存在,这个优化所需的时间开销应当是会比第二次大不少的。

 

第四次大作业

因为我倒在了判断错误格式上了,但是我觉得我将点输入多了的情况判断,正确的格式判断,其余的就是格式错误的格式了,但是这样交上去仍然不行。

我们可以将一些数学计算做一个类,再引用。否则圈复杂度过高,不利于下次迭代和维护。其实只写了一下合并同类项,因为怕写得多了反而出错,权衡一下收益并没有深入(然后还是出错了QAQ)
对于每一个表达式,我们如果可以定义其哈希值,那么sin(x)与sin((x^2+1))便显然可以以x和x^2+1作为两个sin的键,其指数作为值,这样键值关系就出现了,便依然可以做到对于每个三角函数迅速找到与其对应的cos^2 sin^2 与 1。于是就可以用类似第二次的方法进行优化。但是考虑到嵌套因子的存在,这个优化所需的时间开销应当是会比第二次大不少的。

期中考试

可能在按照类图写题目是漏看了abstract或者返回的类型,导致错误,类图对不上,通过对类图的仔细分析,才能找出错误。

对于在这次的实验我觉得没有什么可以改进的,因为我们是按照类图来写的,所以一切都是比较完美的,没有那么多弯路,第一次感觉有类图去写题目是多么的nice。

后面三次大作业----(以电信收费为代表)

这三周,我们写这个pta其中修复了很多bug,比如少写了添加的信息,导致有些东西传不进去或者报错,还有时候没有建立座机类导致一直会报错,有时候没有新建类导致有的信息没传,导致我会一直报错,就算我写完了都还有梳理很长时间的思路,当然这次的pta的作业让我知道了如何面向对象去设计实验,面向对象的好处,他的思路更清晰,修改起来更简单,代码耦合度小,代码复杂度低的优点。当我掌握这种方法后可以使代码复用度更高,可以使后面需要加什么代码直接可以加上去,不用再去另外写新的代码了。这次的Main函数的代码太过于长了,导致很不好寻找,思路不清晰,耦合度有点高。

 

在设计架构方面,笔者感觉第二单元的架构会比第一单元清晰。第一单元每次作业笔者都进行了重构,而且每次都感觉是在面向过程编程,而第二单元后两次作业沿用的都是第一次的架构,并且第二单元完成三次作业的时间相比第一单元少很多,每次作业平均花费时间只有第一单元每次作业的一半左右。在正确性上,笔者实际上没有对自己第二单元的作业进行较多测试,因此,再次感觉一个良好的架构对编程的效率和正确性都提供了很好的保障。

实验二(农夫过河)

这次的农夫过河,让我们很好的了解到了如何建立类,写入方法,还有如何对类进行封装,理解了java语言中包的概念以及package,import语句的使用,掌握了java中方法重载的实现方式。理解了方法调用时引用类型参数的传递过程。

实验分为两个课时,第一个课时是简单的把四个类创建出来,然后定义相关属性;第二个课时是将类的属性封装起来,然后加入相关方法。通过这次实验,更加明白构造函数的作用,并且学会使用eclipse中的码源创建带参数的构造函数;private、protected、public在不同的位置表达什么不同的意思;在加入了Boat类后,让我充分明白重载函数;通过移动Main,了解package语句的作用。总的来看这次实验并不难,只用到Java的第一个特性:封装,才只是Java的一个开头,然后跟着实验步骤走,最后测试完成实验。虽然写出来的代码不是最好的,但我觉得程序本就是开放的,有想法就可以去尝试。只有不断的完善,才能提升。

 实验三(农夫过河)

通过这次实验我学会了如何使用父类简化代码通过容器对代码进行简化,避免重复。通过对有些类的重复的功能通过父类的整合去进行代码的简化,也通过父类使其类与类之间相关联   

 使用多态,这样减少了代码的重复,和方法的重复

实验四(农夫过河)

这次实验是重构了实验二,加入了接口和抽象类,这样简化了代码,还简化了逻辑结构。

这次的实验依旧是分两节课完成,第一次课则是按照类图重新去设计农夫过河,第二次课则是在一的基础上加上笑和哭的接口,总体来说还是比较简单的,有点难度的还是在第一节课。在实验中,我还用到了List和Map,在这里也算是再次了解熟悉了List相关类的使用方法Map相关类的使用方法,同时也对接口的使用有了更加深刻的了解,让我收获最大的还是通过所提供的类图去编写代码,让我了解到了代码通过它这样设计,可以大大的降低了耦合度,使类与类之间的联系没那么密切,便于后续的代码的改进,同时也让我知道了平时设计代码的时候应该也要注意代码耦合度的问题。

 实验五(农夫过河)------关于Javafx

通过这次学会了Javafx的使用,实话说,感觉这里蛮难的,里面好多方法的使用都要去学习,去琢磨,通过查阅资料,浏览他人优质的代码去学习,去改进,整个实验进行的很曲折,功能也有些不完善,但是总体而言还是收获很大的,javafx里面的按钮事件驱动机制、lambda表达式等等,还有很多值得去学习。

通过这次学会了Javafx的使用,感觉这里蛮难的,就跟这个学期初刚接触ege一样,需要学习大量的相关方法,耗费的时间成本很大。但是这次的经理也同样增加了我对Java实际应用的认识,明白了自身能力的不足。总而言之,这次试验的学习很累但是学习到了很多。

总结

 

  在面向对象的程序设计中,对象是最关键的,如何设计类和方法将会是我在java路上的陪伴,写几个类谁都会写,但是否能够高效的将题目做完通过测试那才算学会。正则表达式算是可以接受和理解了,在上个月做简单函数求导的题目还根本理解不了正则表达式的意义,但现在至少能够顺利的使用正则表达式完成PTA上简单的题目

当然在写第五次大作业的时候7-1中的第3次情况写了一大段,但是当运行的时候就不能运行,一开始以为时是单纯的进不了循环,当测试几个样例的时候发现可以进入,那个时候就快崩溃了,当时代码写的太杂了,而且都是很混乱的,导致自己根本改不好,只能无奈的全删了,去骗分。当时就后悔了,应该讲那些代码写进一个类,在类里面进行判断,这样代码既不会写错,到时候改的时候也会更清晰明了一点。不会像这样气急败坏的删除了。

 在后面两次作业中,能明显感受到代码量增加,期中全部加起来都没有400行,但是第四五次大作业,一个题目就会有1000多行代码,因为里面包含很多算法和方法。

 

然后就是日期对象设计的两种聚合方式,我想了很久想清楚了这两种聚合方式的不同和优缺点。

 

 

 

     请允许我打一个很差劲的比喻:聚合一的设计就像是一条单线程,而聚合二的设计就像是多线程;聚合一想要得到正确输出结果,需要全部类贯穿性调用,而聚合二就是独立处理,结果集成这就是两种聚合方法的不同之处。

 

     聚合一的缺点:①可视性差,代码写的非常复杂,在阅读起来有很大的困难。②迭代性差。③耦合度过高,基本上所有的类都耦合在了一起,这使得耦合度高违背了“单一职责”的类设计原则。(优点就没找着,可能是我以一种对比的思路进行找,与聚合二的设计差远了)

 

     聚合二的优点:①可视性强,通过类图可以很清晰的得到各个类之间的关系。②迭代性高,实体类都是独立的,在维护上很方便。③代码的执行效率高,因为它可以像是多线程一样,彼此独立运行然后结果汇总。

 

 所以可以得出,由于聚合一的设计是一条线性的,节点与节点之间都高度耦合,代码的可复用性差。其实我在做聚合二题目之前试图将聚合一的代码复制过来然后稍微改一下的,但是改着改着就发现很难改,就还是决定重新设计。(我认为这也算是可复用性差的一种体现),聚合二的设计使得它实体类都是独立互不干扰的,每个类都执行特定的功能和职责,功能已经模块化,可复用性就很强。

 

 

  对于自己写的程序来说bug还是有很多的,但形成的原因也是有很多的,比如类的混乱,还有随机数的产生导致有些点可以过,但随机数可能使那些点不能过。还有那些正则表达式超级长,看到就脑阔疼,今后我个人会尽量避免写出这样的代码,除非真的万不得已。

    面向对象不一定比面向过程,面向结果优越,但是优秀的封装和类一定好太多了,关于那些能得高分的人,我相信他的封装和代码一定比别人更清晰明了,也更容易看的懂。

 

展望:

  经过这这个学期的洗礼,我觉得我的代码能力有明显的提升,当然有些地方也有些不足,同时自我学习能力也会更强,因为很多东西都是自己在网络上找的资料学习的,当然大家的进步速度也是迅猛的,我也要加把劲,在未来的日子里更加的努力。我希望能够熟练地掌握java这门语言,能够编出一些复杂的程序。通过多编程多练习来提高程序设计能力和培养计算思维。将上课所学到的知识和课下的实践结合起来实现目标。

      加油!越努力越幸运!

 

posted @   做眉间长风  阅读(119)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示