OO前三次作业总结
学习java有近一个月了,在这段时间中不断的了解java。我发现原来的C语言基础,只能解决很小的一部分问题。突然发现自己原来这么菜,还有很多的东西都需要去学,每天努力想要跟上老师的节奏,可还是会非常的吃力。在这三次作业中,题目越来越难,呈迭代形式,必须努力做好,不然后面的题都不会。
作业总结
1、第一次作业:先由开始的加减法运算和赋值,再到判断分数,后来又计算税率,在写有关钱币的计算,再到使用数组,再到排序,最后来判断三角形的类型。这简单的八道题,把java前面的基础内容全部过了一遍,让我们可以更加熟练的使用基础知识。
2、第二次作业:第一道题是IP地址转换,这道题比较简单,只用了将字符串转化为数组,然后进行简单的计算就行。第二道题是合并两个有序数组为新的有序数组,这道题先把两个数组合起来,再排序就行,不过多解释。三四五题都是和日期有关的题目,由于第一次写,代码过长过于繁琐。
3、第三次作业:从第三次作业开始就进入类的学习过程。第一题是创建一个简单地账户类Account,这是比较简单的,非常容易的就写出来了。第二题是定义一个日期类,要求求下一天,这也是比较简单的题目。在前面写了那么多的日期题目后,非常快速的用较为简单的方法完成了答题。第三题就是一道非常难的题目了,先要自学正则表达式,然后根据正则表达式来求输入函数的导数,在这道题中我写的非常迷茫算是比较失败的。
代码分析
1、第一次作业:
7-8中要求输入三角形三条边,判断该三角形为什么类型的三角形。

在这次作业中圈复杂度达到了22,说明这次的代码中存在很多问题,如for语句嵌套可以改一下。在这道题中还要注意一些细节如比较是否为直角时“if(a==b&&(a*a+b*b-c*c<0.001)||a==c&&(a*a+c*c-b*b<0.001)||b==c&&(b*b+c*c-a*a<0.001)) {
System.out.println("Isosceles right-angled triangle");
}” 这里不能写等于,因为根号下的数取的都是约等于的想根号2电脑可能取值为1.41..不会一直取值下去这样1^2+1^2不等于1.41^2,所以要用小于号。
2、第二次作业
7-4中要求求下一天

在这次作业中圈复杂度达到了28,说明这次的代码中存在很多问题,如for语句嵌套问题。
在这道题目中,要求写四种方法:主方法、判断是否为闰年、输入日期是否合法、求输入日期的下一天。If(month = ?) 。
在这道题中,我用了for语句的嵌套,现在终于发现当时有多么傻,这样不仅过程繁琐,复杂度也高,过程较多。现在的话,我会用数组来储存每个月的天数,这样可以完美的解决上述问题,而且可以尽量少用for语句。在这道题中,我很好的学会了方法怎么学使用。在后面的题目中逐渐完善,改进。
7-5中要求求前N天

在这次作业中圈复杂度达到了54,说明这次的代码中存在很多问题,如for语句嵌套问题。
这道题和上一道题有很多相似的地方,我也将for语句,改成了switch,算是有了一点点小进步。这道题中要考虑跨年的测试问题,平年2月19日的测试问题,还有闰年二月的测试问题,八月九月初的测试,还有前零天的测试问题等等。在经过多次的改正代码,和考虑所有情况后,终于将答案写对了,可在看代码,已经写了160多行,这证明我写的着实有点问题。希望在后面的日子里多多努力。
3、第三次作业
7-2定义日期类求下一天
类图:

在上图中可以很好地知道用了哪些类和方法,像isLeapYear(int year)就是判断是否为闰年。

在这张图中圈复杂度只有12,比原来的作业要少很多,这说明用类来写程序可以使程序运行更快,更加稳定。
在这道题中我运用数组将平年的每月的天数都存进去了,在后面只需要判断是否为闰年就行,可以大大缩减写代码的时间。还运用了private的封装性,增加了保密性。在写这道题目时,非常顺利,一遍就过了,这其中有着极大的运气成分。让我对类理解的更加深入了,我会在后面的学习中更加努力。
7-3是一元多项式求导

这道题是我写的最不好的题目了,因为我根本没有完善它应有的功能,只是在特定的测试点上过关了。这点我非常懊悔,当时我就不应该那么早放弃,要是我多去学以下的话,可能就写出来了。虽然这是一道新型的题目,但还是有很多同学得了高分。我会在假期的这段时间尽快补上,跟上大家的脚步。
错误心得:
在刚开始的时候出现过“Resource leak: 'input' is never closed”经过不断地查询后知道这是输入未结束的意思要在后面加上“input.close();”。又如The value of the local variable str1 is not used,就是说str1定义了但没有使用等等,后来又不断的遇到了大大小小不少错误,都被巧妙解决了,还是因为eclipse比较好,可以很好地把问题标出来,这样就不会浪费太多时间去寻找问题出在哪里了。
在改错的时候是最难受的,因为你很可能不是语法错了,而是算法错了。那样的话就非常麻烦了,你需要从头寻找错误的地点,然后再去想你需要怎么更改你自己的算法,所以在平时写代码的时候,一定要先把自己的思路整理清楚,尽可能的想清楚所有的情况,这样去写代码就算写错了,在后面也不需要改多少。
也可以用Eclipse的Debug调试来进行调试,Debug窗口主要显示当前线程方法调用栈, 以及代码行数(有调试信息的代码)。断点Breakpoints窗口:断点列表窗口,可以方便增加断点,设置断点条件,删除断点等。变量Variables窗口:显示当前方法的本地变量,非static方法,包含this应用,可以修改变量值。输出Console窗口:日志等输出内容,调试时,可以将关注的组件级别设置低一点,以便获得跟多输出信息。这样进行的调试可以快速的找到你错误的地方在哪里。结束调试:通过Terminate命令终止对本地程序的调试。
当每次改完错误,代码可以正常运行时,那可能是最快乐的时刻了吧。仿佛我们那么久的努力,终于得到了肯定,或许写代码是痛苦的,是乏味的,但只要你肯努力下去,付出总是会有回报的。无论我写的代码如何报错,我都会努力的改正下去,直到他完全正确,这是对自己代码的尊重,也是对自己的尊重。或许你写的代码在别人看来一文不值,只有你自己知道它的价值,你的代码可能是你熬了好几个晚上才写出来的,这份长久和成功,没有人可以剥夺。
对自己的改进建议:
我认为我写的代码不太好,无论是在速度上还是质量上,都算得上是比较差的了。而且圈复杂度较高,我认为我以后要少用for语句,多用switch case,这样可以减少圈复杂度。或者去用数组。当遇到有计算的题目时,在开始写之前想想最简单的方法,这样可以节省写代码的时间,也可以减少代码的行数,使自己的代码质量变高。而当一种方法行不通时及时改变,去寻找简单明了的办法。
像第二次作业的倒数第二道题,我用了非常繁琐的if语句,还用了for嵌套,导致代码极其的长。在题目集三中,又遇到了差不多的题,不过在这次题目中,我非常机智的用了数组,将好几十行代码转换为十几行代码。这边是思考过后的成果,而且过程非常简单明了,也没有漏掉什么条件,使所有的测试点都过了,成功完成作业。
总结:
1、在第一次作业中,学会了字母数字字符串数组的定义,和输入输出。使java中最简单的部分学习完了。
2、在第二次作业中,我们学习了,如何定义和使用方法,这样可以显得程序再分类进行。
3、在第三次题目集中,我们开始学类,这是新的开始,而java的难度也从这时开始。从刚开始创建简单的一个类,到后面创建好几个类,再连用起来。
4、然后第三次作业的最后一题,让我们学会了正则表达式。这又是一个新的需要学习的东西,也是解决最后一道题的关键所在。我认为这是我没有学好的东西,不然为什么写不来最后一道题,在后面的日子里,我会再努力的把正则表达式学习一下。我相信只要努力,就一定能够学好。
5、在课堂上,我觉得有一点听不懂老师讲的知识,也可能是我没怎么预习的原因,但老师讲的课还是有一点用的。
6、在作业方面,作业布置的数量虽然少,但是难度是真的大呀,作业又不能直接写,只有先学习了其他的才可以去写。只是在边学边写,而我们每天还有很多的课程,学习的时间就很少。所以就感觉写作业非常的累,而且感觉作业非常的多。但我觉得做作业布置那么多是好的,它可以促进我们赶紧学习,抓紧一分一秒,不去浪费时间。
浙公网安备 33010602011771号