java迭代法求圆周率用梯形_java第二阶段作业总结

0.前言

第二阶段的作业共包含三次作业。第一次作业包含三道题目,第一道题目考查了使用java中的字符串处理类以及正则表达式对输入的字符串数据进行合法性校验及计算,第二道题目考查了使用蒙特卡洛仿真方法求圆周率,第三道题目考查的使用java中的继承来求出图形的图形和体积。第二次作业包含两道题目,第一道题目要求学生掌握类的继承、多态性及其使用方法,第二道题目考查了使用类的继承、多态性编写程序对简单多项式的导函数进行求解。第三次作业包含三道题目,第一道题目要求学生掌握类的继承、多态性使用方法以及接口的应用,第二道题目同样要求学生掌握类的继承、多态性使用方法以及接口的应用,第三道题目是加分题,让学生设计更好的求素数的算法。

1.作业过程总结

三次作业之间的知识迭代关系

从本文前言中就可以看出,这三次的作业基本上都考查了同学们对继承、多态性的使用,更深层次运用接口来解决问题,其中正则表达式的使用在第一次和第二次作业中都运用到了,所以继承和多态性以及正则表达式的应用次数比较多,进而三次作业的知识迭代主要是继承、多态性以及正则表达式的使用。

如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性:

所谓封装性,个人从做作业的过程中认为封装是对某个类里面的属性或者方法进行封装,很明显,封装了的类,是不容易被其他类进行调用或者修改。首先对于某个类里面的属性来说,如果要使类里面的属性不被修改或者使用,那么就可以对属性进行封装,可以在定义属性语句的最前面加上private,比如private double radious;这样这个属性就不会被随意修改。很多时候使用public进行成员属性的定义就很容易被其他类进行修改或者使用。同理,某个类里面的方法也可以像属性一样做到被封装。其次所谓继承性,就是子类可以继承父类的很多方法和属性,这样就使得子类可以很灵活的被使用,因为所有的子类对象都是父类对象,子类可以继承父类的所有公开的属性和方法,但对于私有属性和方法,子类就不能继承,如果父类有继承了一个类,那么子类可以继承父类所继承的那个类里面的所有公开属性和方法,需要注意的是一子类只能有一个父类,也就是说一个子类只能继承一个父类。这个特点可以从第一次作业的第三题很好地体现出来,这道题讲的是求出各类图形的面积和体积,比如圆类和矩形类都继承了图形类,而球体类和柱体类分别继承了圆类和矩形类,所以球体类和柱体类都继承了图形类的公开属性和方法,从输出结果就可以看出来。子类还可以重写父类的方法,当子类调用和父类同一种方法,此时子类不再是调用了父类的方法,而是调用了自己所重写的父类方法,这样就使得子类更加灵活,更易以修改子类的方法。不过在重写父类方法时,子类中方法的返回值类型必须和父类中的一样。在题目中,圆类和矩形类就重写了图形类里面的getArea()方法。所谓多态性,多态指的是父类引用子类的对象,并且子类和父类有同名的重写方法,多态机制可以使内部结构不同的对象使用相同的外部接口,比如所有的子类对象都是父类对象,就很好说明了多态性的意思,就是所谓的向上转型。

作业过程中遇到的问题及解决方法

在第一次作业当中:第一道题目是关于水文数据校验,这道题目比另外两道题目要难很多,一个是要正确使用正则表达式,当时自己主要出现的问题在于如何正确写出关于数据的正则表达式,经过查找资料仔细看了一下,正则表达式的使用,然后把用于判断输入数据是否合法的正则表达式写出来了,然后在写判断输入结束的条件语句的时候出了问题,当时没有用字符串类自带的判断是否相等的方法来判断输入是否结束,就只是用了平常的数与数是否相等的语句,结果导致没有输出结果,然后经过向同学请教,就知道了问题出在哪里,然后修改一下改正过来。还有就是在定义一个数组的时候,当时自己测试的时候没有问题,就是在提交代码之后,有个测试点过不去,后面自己看到同学说定义的数组的长度要大一点,这样才能通过那个测试点,后面自己一修改,再一提交,答案就正确了。第二道题目出现的问题主要是在写判断条件的时候没注意,写大于号的时候写成了小于号,结果出错了,后面仔细检查一下代码,发现了问题,后面修改过来再提交就对了。第三道题目出现的问题主要是子类没有使用super方法来调用父类的私有属性,结果出现错误,后面经过思考,想起了要正确使用super来调用父类里面的私有属性,这样父类的私有属性才能被子类所使用,然后一修改再提交,就答案正确了。在第二次作业当中:第一道题目出现的问题主要是对输入数据不合法的时候判断的时候不够细心,考虑不够周到,导致输出结果和答案不同,后面认真看一下代码,发现很多漏洞,然后修改过来,再提交,就正确了。第二道题目出现的问题是在如何将一元多项式中的幂函数和常数分隔开来,并且每一项的正负号不能改变,当时在这个问题上思索了很久,实在不知如何做的时候,就向同学请教,然后同学提示我可以使用字符串中的replace以及contains方法来解决这个问题,然后自己认真结合一下表达式,就把这个问题解决了,然后再提交,结果有一个测试点没有通过,就是数据中存在空格这个点,然后询问同学,就知道了怎么修改代码,再提交,就正确了。在第三次作业当中:第一道题目出现的问题首先是在输入中,当时踩了一个坑,就是没有将Main类里面的输入对象定义为静态的输入对象,而是在另外一个需要输入的类里面重新定义了一个输入对象,当时在eclipse上运行好像没有问题,结果一提交,就出现了问题,有输入正确数据的测试点没有通过,然后仔细看一下作业指导书,发现了问题,然后按照指导书的提示,修改一下代码,然后再提交,发现测试点没通过的少了很多,但还是有两三个测试点没有通过,然后仔细检查一下,发现输出的图形英文名称的某个字母写错了,然后赶快修改过来,再提交就答案正确了。第二道题目出现的问题是提交代码的时候,结果出现提示说代码长度超过限制,没有提交上去,然后自己认真思考一下,发现自己写的循环语句写了很多,所以想到如果减少每次的循环语句的写入的话,应该就能提交成功,然后自己就把循环语句写在一个方法里面,但时候要用的时候,只需要一条语句就可以达到要求,然后再提交,结果测试点有没有通过的,然后检查一下代码,发现有字母写错了,然后改过来,再提交就答案正确了。

每次作业花费的时间比例

第一次作业花费的时间比较为:3:1:1,第二次作业花费的时间比例为:2:3,第三次作业花费的时间比例为:3:2:1。

对编程过程的严谨性的认识及教训

编程中不能没有严谨性,一道看似很简单的题目,如果不小心都很有可能出错,比如在这阶段的作业当中,有一道关于图形的题目,输出的结果当中含有图形的英文单词,这是自己犯过错误的地方,当时自己写错了其中的某个字母,就导致测试点没有通过,其实这样的错误看似不应该犯,但还是犯了,自己感觉就是自己当时没有仔细检查一下,如果当时认真看一下,基本上就能找到错误,所以自己觉得每次写完了一道题的代码,要认真检查一下,不能马虎大意,检查一下有没有出现一些小错误,在确认无误或者找出了错误并修改好后再提交代码,这样就能更好地解决一些问题。还有就是要认真看清楚题目的要求,很多时候自己没有看清楚题目的要求,结果导致代码写的不合题目要求,所以今后自己会认真读清楚题目的含义和要求。

2.OO设计心得

对面向对象三大技术特性之间关系的理解

个人觉得继承是封装的更好的拓展,继承可以在保持封装性的前提下,突破访问的限制,可以做到对一些公开的属性和方法进行调用,更好地提高了代码的复用性,而继承是多态的基础,只有在继承的前提下,才能完成向上转型和向下转型。

面向对象设计设计的基本原则的理解(单一职责原则及“开-闭”原则)

单一职责:对于一个类应该包含这个类所具有的属性和方法,不属于这个类的属性和方法不应该放在这个类当中。

“开-闭”原则:就是对于扩展是开放的,对于修改是关闭的,就是说可以增加一些功能或者属性,但是对于一些自己原有的属性或者方法是不允许被修改的。

OO编程思维的理解

无论做什么,都需要有一个好的思维,对于OO编程来说,好的思维方式是基于面向对象的,以前的思维偏重于面向过程来说,但是对于OO编程来说,它是需要面向对象的思维方式,面向对象的思维注重于代码的复用性,就是说,解决很多问题,都可以用到同一部分代码,不需要自己另外再去写,这样就体现出OO编程的优越性,能够提高程序的效率。

类设计心得

自己感觉到,一个类的设计要遵循单一职责和“开-闭”职责,一个类的设计要包含这个类该有的属性和方法,不属于这个类的属性或者方法,不应该加在这个类中。当扩展的时候可以增加一些功能或者属性,对于自己一些原有的属性和方法是不允许被修改的。

3.测试的理解与实践

测试对于编码质量的重要性

测试是衡量编码质量的好与坏的方法,如何去判断编写的代码是否符合要求,首先就需要对代码进行测试,如果测试的结果不符合要求,很明显,编写的代码的质量就很差,很多时候,只有对代码进行多次的测试,就基本上可以衡量出编写的代码的质量,所以测试对于衡量编码质量是非常重要的。

假设使用Junit进行程序的测试,是否可行

使用Junit进行程序的测试是可行,而且是比较好的一种方法,这样可以很容易地判断出程序是否符合要求,是否有错误。

4.课程收获

通过第二阶段的学习,我知道了在编程的过程中要保持严谨性,不能马虎大意。我掌握正则表达式的使用,类的继承、多态性及其使用方法以及接口的应用。

5.对课程的建议

第三阶段作业的难度、题量的建议

作业的难度和题量可以适当加一点,但不要加太大的难度,恐怕学生一下子很难适应和按时完成作业。

课程讲解方面的建议

老师对该课程的讲解还比较好,我的建议是老师可以多给学生提些问题,带动学生的参与积极性,这样可以加强学生对所学的知识点的理解和掌握。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值