第二次总结性blog
第二次总结性blog
一、前言
1.第四次大作业中主要考察的是类的设计,调用类里的各种方法以及增值表达式的运用,总共三道题,7-1、7-2的难度适中,花费的时间大概每道题半小时。7-3中点线性系列中关于对凸四边形的计算难度比较大,耗时很久,花了几天都没有弄到满分,其中对于数学的计算比较令人头疼与难以理解。希望自己以后能解决好图形类的题目叭!
2.期中考试一共有三道题,题量不大,三道题是一个渐进的过程,其中第一道题最为简单基础,最后一道题最难。每道题都有给设计类图,按照设计类图完成编程。题目总体来说不太难,思路比较清晰,但是因为我的基础不太扎实,所以我在期中考试中并没有拿到满分。每道题大概费时半个小时,其中我关于容器类的掌握不够扎实,导致我最后一道题并没有拿满分。今后一定要稳扎稳打,将自己的面向对象程序设计的能力提高,不要再出现简单的题目写不出来的情况了。
3.目前做了两次实验,实验的难度总体偏大,每次实验都要写好几天,但是能够很好的锻炼自己的编程能力,很好的巩固自己所学的知识。
二、设计与分析
第四次大作业——7-2 点线型系列4—凸四边形的计算
1.思路
1.通过charAt的运用对字符串进行分析,
2.判断空闲、起始、结束以及奇偶校验位的数字是否存在和正确,
3.用if语句再对相应的情况进行不同的分析,输出不同的结论。
2.重要代码分析
1.//判断是否为四边形
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.//四边形判断点是否在四边形内
1 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.类图
4.踩坑心得
因为我倒在了判断错误格式上了,但是我觉得我将点输入多了的情况判断,正确的格式判断,其余的就是格式错误的格式了,但是这样交上去仍然不行。
5.改进建议
我们可以将一些数学计算做一个类,再引用。否则圈复杂度过高,不利于下次迭代和维护。其实只写了一下合并同类项,因为怕写得多了反而出错,权衡一下收益并没有深入(然后还是出错了QAQ)
对于每一个表达式,我们如果可以定义其哈希值,那么sin(x)与sin((x^2+1))便显然可以以x和x^2+1作为两个sin的键,其指数作为值,这样键值关系就出现了,便依然可以做到对于每个三角函数迅速找到与其对应的cos^2 sin^2 与 1。于是就可以用类似第二次的方法进行优化。但是考虑到嵌套因子的存在,这个优化所需的时间开销应当是会比第二次大不少的。
期中考试第一题——点与线(类设计)
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.重要代码分析
1 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.重要代码分析
1 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 }
3.类图
4.踩坑心得
可能在按照类图写题目是漏看了abstract或者返回的类型,导致错误,类图对不上,通过对类图的仔细分析,才能找出错误。
5.改进建议
对于在这次的实验我觉得没有什么可以改进的,因为我们是按照类图来写的,所以一切都是比较完美的,没有那么多弯路,第一次感觉有类图去写题目是多么的nice。
三、总结
对于自己写的程序来说bug还是有很多的,但形成的原因也是有很多的,比如类的混乱,还有随机数的产生导致有些点可以过,但随机数可能使那些点不能过。还有那些正则表达式超级长,看到就脑阔疼,今后我个人会尽量避免写出这样的代码,除非真的万不得已。
当然在写第四次大作业的时候7-2中的第4次情况写了一大段,但是当运行的时候就不能运行,一开始以为时是单纯的进不了循环,当测试几个样例的时候发现可以进入,那个时候就快崩溃了,当时代码写的太杂了,而且都是很混乱的,导致自己根本改不好,只能无奈的全删了,去骗分。当时就后悔了,应该讲那些代码写进一个类,在类里面进行判断,这样代码既不会写错,到时候改的时候也会更清晰明了一点。不会像这样气急败坏的删除了。
期中的做题目,我虽然没有取得满分,但是最后我在下面看了看,我觉得我会,可能是当时太紧张了,学的知识不牢固。通过这次的期中考试我知道了容器怎么用,对于类的分类也更清晰了。
面向对象不一定比面向过程,面向结果优越,但是优秀的封装和类一定好太多了,第四次作业能写满分,我相信他的封装和代码一定比别人更清晰明了,也更容易看的懂。
展望:
经过这半个学期的洗礼,我觉得我的代码能力有明显的提升,当然有些地方也有些不足,同时自我学习能力也会更强,因为那些正则表达式是自己在网络上找的资料学习的,当然大家的进步速度也是迅猛的,我也要加把劲。
在后面两次作业中,能明显感受到代码量增加,第一次全部加起来都没有400行,但是现在,一个题目就会有200-350行代码左右,因为里面包含很多算法和方法。
期望:
在这半个学期我学到了很多东西,例如一些函数的运用,同时也吸取了教训,积累了经验。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)