作业总结
题目要求
这两次大作业以考查平面图形的计算为主,包括三角形,四边形和五边形。涉及到很多种情况的验证和计算,工程量和难度个人感觉都比较大。
设计思路
平面图形可以建立几个相同的类,Point点类和Line线类,是可以在这两次作业中重复利用的代码,以及判断输入坐标的格式是否正确我也单独创建了一个类,也是可以重复利用的代码,只需要根据题目要求进行一些修改即可。对于不同选项的功能实现我的做法是单独一个选择创建一个类进行功能的实现,在主函数里面调用类的函数达到目的。
类图:
第四次作业:
第五次作业:
期中:
优点:两次作业的代码设计想法是一样的,除了共同的类Point和Line或者是多个选项需要用到的判断类,把每个选择所要实现的功能写进一个类里面,相当于是构建函数,但因为主函数里进行功能的选择以及输出结果,所以没有把功能放进主函数里,不然太长了不好修改。
缺点:每个功能类里的函数计算都是double类型的返回值,判断都是boolean的函数,所以在主函数里要加一个if语句进行判断后根据if的判断结果进行输出,例如
if(ONE.PDWBX(a,b,c,d,e)) {
System.out.println("true");
}
else
System.out.println("false");
这样增加了主函数的代码量,下次可以在类里专门建立一个函数用于判断和输出,这样的话由于各个函数的分工明确,主函数的代码量少,想要修改代码或者debug的时候都会清晰很多。
问题与难点
1.因为输入的是String类型的数据,在建立Point类的时候储存坐标信息时需要利用语句Double.parseDouble()把String类型转换为double类型。
2.建立的Line类里有计算斜率k的功能,但是有的线斜率不存在,虽然我用了
if(a.x!=b.x) { k = (b.y-a.y)/(b.x-a.x); }
但是在运行时发现如果a.x==b.x的话,k会自动算成0,这就导致了很多地方的误差,因为能力有限找不到根治的方法,只能利用题目信息,在a.x==b.x的时候直接令k=100000。虽然治标不治本但
是在这题上还是有用的。
3.题目的计算量很大,比如判断五个点是否构成五边形需要判断不相邻的两条线段不相交,需要考虑这两条直线是否有斜率,构成直线的两个点的x和y的大小比,需要分很多种情况讨论,一不小心就会出错。
总结
1.这两次大作业感觉主要还是对我们的代码进行一个模块化,如果不面向对象,没有明确的各个类的分工,这两次大作业会寸步难行,同时也是提升我们的思考和逻辑能力,有很多功能想要完全实现很难,算法很难想到,想到了也有很多细节需要注意,需要不断地测试和完善。
2.期中考试的三道题层层递进,第一题只是根据类图写函数,和以前的东西一样,后面两个增加了继承的概念,但是根据类图一步一步写也没什么难度,主要还是有很多细节要注意,像private的使用,对应类图也要仔细不然会有汗多小问题。
3.这两次大作业都没有拿到多少分,除去能力的问题,花在这上面的时间也不够,还是需要对java提高警惕性,课后多加思考,希望以后可以更好的运用自己学习的知识来写入代码中。