在差不多一个月的时间,我们一共经过了三次作业的练习。

第一次作业的题量是最大的,一共有八道题目,但难度很低,主要考察的是Java的基础语法知识。比如对变量进行赋值,字符间的比较,条件语句的使用,条件的判断,运算符号的使用,取平均值,冒泡排序法,且和或的条件判断。运用上学期c语言的基础,我们能轻松快速的把这些题目做出来。

第二次作业相比较于第一次来说,难度提升了一些,题量少了一点,但是更进一步要求我们对Java的理解,一共五道题目。前两题考察了IP地址转换,数组的创建与整合。后面三题需要我们在一个类中熟练的运用各种方法,对boolean值的使用,并要求我们学生充分考虑到无效边界值测试和特殊情况的代码实现。第二次作业虽然比第一次难了些,但只要简单的了解了相对应的语法知识,认真仔细阅读题目给出的各个要求,并将一个大问题分解成不同的小问题,利用自顶向下或者自低向上的方法,在存根方法快速的构建程序的框架,再逐步实现细节,就能把第二次作业做的还不错。

第三次作业相较于前两次作业来说,可以说是难度陡增,代码量也增加了许多,更需要我们学生有面向对象思考的能力,使用类来建模对象。第一题需要创建两个私有属性的对象,题目需要我们定义类和创建对象,使用构造方法构造对象,通过引用变量访问对象,访问对象的数据。第二题定义了一个日期类,需要我们向方法传递对象参数以及值传递。如果不能正确的判断日期类中变量的作用域,我们很难做出这道题来。第三道题目对很多同学来说难度很大,由于我基础不怎么好,刚开始对这题目基本是没有什么头绪的,对使用类与对象编写程序对简单多项式的导函数进行求解对我来说很困难。当时我只有请教其他同学来才能取得一点思路,但最终还是没有将这题解出来。第三次作业题目量对比前两次虽然少了很多,只有区区三道题目,但难度是高了很多,90分以上的同学还是比较少的。这三题作业总体来说难度是有一个慢慢上升的梯度,通过这个循序渐进,我们能慢慢的体会到Java的魅力。从容易到难,相信在一次次作业的练习中我们能渐渐的入门Java,这三次作业提高了相较于c语言的编程能力。( 在三次作业之间也穿插了一些实验,在这些实验中我们能体会到Java相比较于c语言其强大的处理问题的能力,通过这些问题的解决过程逐渐来引导我们学生面向对象进行思考)。

题目集1的7-8:

在这题目中我大量的运用if和else if 的条件句子,利用double a=0,b=0,c=0,i=0;定义了三个变量来表示三角形的三条边,再利用if(a<1||a>200||b<1||b>200||c<1||c>200)来对三角形进行判断数据是否非法。然后利用一系列else if 语句来判断三角形类型。但刚开始的时候对一些非法数据没有在意,导致有一个测试点没有通过。因为我之前的c语言基础很薄弱,导致我并不能充分考虑到每种三角形的形状与

三边之间的关系,最后我根据不同边的大小关系通过一个个的条件语句成功实现了代码。

题目集2的7-4:

7-4是求下一天 的题目,在此之前我们已经在c语言中做过类似的题目,输入年月日的值(均为整型数),输出该日期的下一天。只要实现了类中方法的使用,就可以求出下一天。对于这个题目我们可以把问题拆分为几个子问题。先使用Scanner来读取年月日的输入,通过boolean checkInputValidity这个方法,我们能判读日期的合法性。利求下一天的问题来说,二月份是最特殊的,润年二月份为29天而非润年天数为28天,在nextDate的方法中我们对二月分类讨论。在其他的月份中,有三十天的也有三十一天的,从中分类讨论,如果是月末中的一天,月份加一,如果是十二月份的最后一天则年份加一。这样在main方法调用各个方法实现了求下一天的代码。
题目集2的7-5
求前N天,与求下一天的题目相似。先取一个合法日期,把年月日规定在一个相应的范围内,在对n的值进行限定, 在main方法中当输入的年、月、日以及n的值非法时,输出“Wrong Format”。对前n天和后n天的求法中,我分了两个方法,在每个方法中使用switch 方法,对isLeapYear或者is not a LeapYear进行分析。仿照求下一天的方法,对二月和十二月分离讨论,因为他们分别受是否为润年和对年份的增加有影响。其次每个月的前十天和后十天也做出区别,在两个方法的末尾else houmian(year,month,day,n)实现递归。
题目集3的7-2:
为一个定义日期类的题目,这题与题目集2的7-4很像,但要求对年月日定义为私有属性,并且日期的合法取值范围也很不一样。如果这题能使用Java中和日期相关的类和方法的话将会轻松很多。参考data类的结
构图,很快就解出了这题目。

public static void main(String[] args) {
Scanner input=new Scanner(System.in);int year,month,day;
year = input.nextInt();month = input.nextInt();day = input.nextInt();
if(year<1900||year>2000||month<1||month>12||day<1||day>31)
{System.out.printf("Date Format is Wrong");
}
boolean n=isLeapYear(year);
nextDate( year, month,day);
}

在这个main方法中调用自己创建的方法解出后一天的问题。

 
题目集7-3
一元多项式求导(类设计),题目要求使用类与对象编写程序对简单多项式的导函数进行求解,在这个题目中,我们要对输入的多项式进行求导计算,并输出它的导函数。题目中给出了求导算法,在题目中也要充分考虑到输入与输出的合法性,题目要求我们在编程时务必考虑面向对象中的封装性,而且要简单的实现表达式正确性的校验,涉及到的相关问题需要采用正则表达式来完成。刚开始的时候并不了解正则表达式,在菜鸟教程中学习了一小节课后,就开始尝试的进行表达式的校验。正则表达式在这里发挥了很大的作用,在做题的过程中学习知识点来解决问题能提高我们学习的效率,也能更好的灵活的运用知识。这题对于前面的题目来说难度是大了很多很多人只拿了不到一半的分数。还好求导算法已经给出了,(高中的数学知识忘的差不多了)。
 
采坑心得:有时候在java编译器中不会报错,到pta中却报错了,这可能是因为有些库在pta中没有给出。还有在过测试点的时候,没有充分考虑到无效测试点,这样使分数非常的低,在解答题目的时候,我们应该把一个大问题分解为一个个小问题,在每个小问题中充分考虑 到无效数据和特殊数据。并且将不同的问题分别给规定的方法实现。这样才能使代码可读性和简洁性增强。大部分的时候很容易过不了无效边界测
试,在以后要多加改进。
 
 

在改进的过程中,我们可以根据其测试点的提示来改进自己的代码。逐个测试就能通过测验。在检查测试的过程中也发现了自己的代码风格不好,在改进的过程中有时候会遇到读不懂自己的代码的情况发生,在做作业的过程中浪费了我们很多时间。慢慢的形成自己的代码风格才能做到持续改进。

 

从变量的声明,赋值语句和赋值表达式的运用,数值数据类型和操作再到方法和数组的调用,再到对象和类,面向对象的思想。往后还有继承和多态和异常处理。在以后的作业中,先仔细的审查题目然后如果有不了解的知识就多看看菜鸟教程,然后实在有不解的地方也可以问问同学,向他们请求帮助。以后Java的学习中应该投入更多的时间,希望在更多的时间付出能让我在作业中取得更好的成绩。