JAVA第一阶段学习总结
0.前言
此博客是对第一阶段java课程学习的总结,共布置有PTA作业三次,PTA作业循序渐进,一步步引导我们从面向过程编程,走向面向对象编程。
1.作业过程总结
①总结三次作业之间的知识迭代关系
第一次作业 7-1 计算税率,7-2 判断坐标点所在范围,7-3 电话键盘字母数字转换,7-4 判断三角形类型,7-5 统计最大数出现次数,是对Java基础知识的检测,主要考察Java的基本语法,如 循环语句,判断语句,数组,字符串,逻辑运算等的知识点 。
第二次作业7-1 求一元二次方程,7-2 判断闰年及星期几,7-3 求下一天,7-4 求前N天 ,是对Java的方法知识的考查,一个类中包含多个不同的方法,不同的方法实现不同的功能。
第三次作业7-1 用类解一元二次方程式,7-2 日期类设计,7-3 日期问题面向对象设计(聚合一),7-4 日期问题面向对象设计(聚合二),增加了类的考察,要求用多个类来解决问题。
三次作业一步一步的往上递进,从最基本的Java编程基础知识,到方法的使用,再到类的使用,每次作业都是在前一次所学知识的基础上增加新的知识,形成知识的迭代。
②如何通过作业逐步从面向过程过渡到面向对象;
第一次,第二次作业的编程模式与我们之前所学的C语言的编程模式大致相同,都是面向过程进行编程,而第三次作业开始就有了面向对象的编程特点。
在第一二次作业中,我编程时是看到问题,然后,第一步干什么,第二步干什么,第三步干什么,而第三次作业开始,我们是把问题分解成很多个不同的对象,各个不同的对象分别负责不同的功能,对象之间相互独立又相互联系。
第一次作业我写的代码基本上都在main 方法中,第二次作业开始有了main 方法之外的方法,main方法更加简洁,第三次作业 ,开始有了类的使用,创建了多个不同的类,每个类中有相应的成员变量,和方法。定义了 year month day 对象。
③作业过程中遇到的问题及解决方法
第一次作业7-3 电话键盘字母数字转换,要求从键盘输入一个字符,取值范围为“a~z”或“A~Z”,当输入多个连续字符时,取第一个字符。
查资料找到charAt() 方法可以用于返回指定索引处的字符。只要charAt(0)就可以返回输入字符当中的第一个字符。
第一次作业7-4 判断三角形类型 ,其中判断是否是等腰直角三角形一直报错
原代码:
1 else if((a==b||a==c||b==c)&&((a*a+b*b-c*c==0)||(a*a+c*c-b*b==0)||(b*b+c*c-a*a==0)))//等腰直角 2 System.out.println("Isosceles right-angled triangle");
改后代码:
1 else if((a==b||a==c||b==c)&&((a*a+b*b-c*c<=0.000001)||(a*a+c*c-b*b<=0.000001)||(b*b+c*c-a*a<=0.000001)))//等腰直角 2 System.out.println("Isosceles right-angled triangle");
经过向同学求教,才知道 因为 a,b,c都是double类型的变量,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式 。
第二次作业7-1 求一元二次方程,要求当输入数据非法时,输出“Wrong Format”
当a=0时,一元二次方程就不是一元二次方程了,所以要判断a是否等于0
第二次作业7-2 判断闰年及星期几,public static int numOfDays(int year,int month ,int day) ;//求出year-month-day到0001-1-1的距离天数,返回整型数.
当前所在年之前的天数好求,只要算出年数,在再乘以365,再加上之前的闰年数,就行。
计算本年天数,这里用的是switch语句,case语句不加break,程序运行到对应的case后加的是前一个月的天数,由于没有break还会继续执行剩下的case,直道把之前所有月的天数加完,最后在加上当月的天数就是本年的天数,
现在我想到了一个新的方法,就是把十二个月的天数写成一个数组,一个写两个数组,一个是闰年的数组,一个是平年的数组(二月天数不同),然后判断当年是闰年还是平年,再取用对应的数组,用循环语句求出本月之前的数组和,最后加上本月天数,就是本年的总天数。
1 switch (month) { 2 case 12: 3 AfDay += 30; 4 case 11: 5 AfDay += 31; 6 case 10: 7 AfDay += 30; 8 case 9: 9 AfDay += 31; 10 case 8: 11 AfDay += 31; 12 case 7: 13 AfDay += 30; 14 case 6: 15 AfDay += 31; 16 case 5: 17 AfDay += 30; 18 case 4: 19 AfDay += 31; 20 case 3: 21 if (isLeapYear(year)) 22 { 23 AfDay += 29; 24 } 25 else 26 AfDay += 28; 27 case 2: 28 AfDay += 31; 29 case 1: 30 AfDay += day; 31 }
④每次作业花费的时间比例
第一次作业:2:1:2:3:2
第二次作业:2:3:3:2,用了大量的if else if 语句,代码又臭又长,几次把自己搞晕。
第三次作业:1 :3: 4: 2,由于第二次作业中没有运用到面向对象的思想,许多代码重复都在类中重复使用,导致第三次作业虽然功能在第二次作业中已实现,但还是花费大量时间进行了大修改,减少了代码的重复率。
⑤对编程过程的严谨性的认识及教训
在这几次作业中,我发现编译错误并不可怕,因为编译错误编译器能给我们提供信息,让我们知道哪里错了,最恐怖的是,编译通过,但是达不到要求,不能实现应有的功能,我大部分时间都花费在了调试代码上面。其中许多问题都是逻辑上的问题,当我仔细阅读自己的代码的时候才恍然大悟,原来是这里错了 。 由于编程过程的不严谨,我许多错误都隐藏的很隐蔽,乍一眼看上去好像都没什么问题,但就在那些不起眼的地方就可能隐藏着逻辑上的问题。
所以写代码时一定要认真严谨,这样可以大大缩短我们后期修改花费的时间。
2.OO设计心得
①面向过程与面向对象的比较
我觉得面向过程的设计是一个完整的,不可拆分的整体,一个整体执行完所有功能,各个部分之间有较强的联系,一旦某个地方缺失,可能整个整体都失去作用。而面向对象这是一个可以灵活拆卸,组装的整体,各个部件之间的关联比较低,每个部分都用自己的功能,不重复。
②面向对象设计的基本原则理解
将对象抽象为类,每个类只有一种功能,代码之间的耦合度要尽可能低,是代码能够复用。
③OO编程思维的理解
万事万物皆为对象,每个对象都有自己的属性和方法,类是对象的抽象,对象是类的实例
3.测试的理解与实践
①测试对于编码质量的重要性
如果不进行测试,可能我写的代码只能在某一单一情况下才能正常运行,它是残缺的,只有进行尽量全面的测试,才能发现代码中的错误与不足,才能让代码更加稳定和安全,才能让代码发挥真正的作用。
②假如让你设计测试用例,你会如何做
尽可能地设计出较为全面的测试用例,考虑要周全,如对一些极端的,非法的用例进行测试。
4.课程收获
经过这四周的学习,让我的编程思想从以前C语言的面向过程,一点一点的引向面向对象,让我不再只注意事件的发生过程,让我有了对象的概念,通过对象来描述事件。通过第三次作业,我体会到现在所学的面向对象编程可以极大的让我们写的代码可以重复使用,当我们在另外一件事中用到某一个功能时,我们可以再次调用之前写过的类,这极大的缩短了我们开发的时间,同时我们要增加什么功能,也比之前的面向过程编程更加方便。对比前两次作业,第二次作业当中,我在一个类中写了几个方法,方法许多功能都是相似的,这导致其中代码有大量的重复,大量使用了if elseif ,十分啰嗦,阅读起来也十分麻烦。
5.对课程的建议
希望老师能对pta的部分题目进行讲解,或者每次作业结束后,能给我们展示一下一些写的好的代码,共同学们参考学习,发现自生不足。
6.后一阶段的学习计划
继续保质保量的完成老师布置的作业,上课认真听讲,提前预习,多多学习,提升自己的编程能力。

浙公网安备 33010602011771号