初识Java
初识Java
学习Java 2个月,由于疫情原因这两个月的学习都是在网上完成,通过腾讯课堂授课,再完成课后PTA上的作业,第一阶段的作业共有三次,第一次作业为:计算税率;判断坐标点所在范围;电话键盘字母数字转换;判断三角形类型;统计最大数出现次数。主要使用了输入输出和if,while等判断语句,通过简单判断和考虑多种可能性再分别输出不同的语句。技巧相对简单,我完成此次作业时间也较少。

第二次作业为:求一元二次方程;判断闰年及星期几;求下一天;求前N天。这四个作业中加入了主方法和子函数的运用如第一题:求一元二次方程ax^2 + bx + c = 0的根,要求a、b、c从键盘输入,这道题需要首先判断输入是否合法,再通过b2-4ac与0的大小关系来判断根的个数,最后通过求根公式(-b+-Math.sqrt(b*b-4*a*c))/(2*a)来得出两根的值并输出。首先我习惯性会想直接在主方法中完成,但是子函数的运用可以使求解一元二次方程的根的个数进行板块化处理。后三题是年月日上的判断和计算在求下一天中模块化思想使用的更加灵活,而且在年月日的设计上在实际编写代码的过程中比我想像的复杂的多,如年的天数有365,366两种请况,每月天数也有28,29,30,31四种情况,在求下一天的情况中不同月份不同年份当月日数的上限也不同需要依次考虑,但在这三次的年月日设计中有很多可以通用的子函数如输入合法的判断,是否为闰年的判断。

第三次的作业为:用类解一元二次方程式,日期类设计,加入了class,get,set的运用,解一元二次方程式需要运用类,日期类设计版块化设计更加丰富,主要测试在public DateUtil getNextNDays(int n);public DateUtil getPreviousNDays(int n); public int getDaysofDates(DateUtil date)。在求前n天和后n天的时候可以借鉴之前写的日期设计,我根据我的需要添加了public static int numOfDays(int year,int month ,int day) ;//求出year-month-day到0001-1-1的距离天数,返回整型数;此次作业花费时间较长,但是更加感觉到模块化思想的重要性。

这三次作业内容上有许多相似的地方,主要的板块有两个,一个是解二元一次方程,另一个是日期设计。解二元一次方程无非就是判断输入合法-判断根的个数-求根,两次不同的作业思路相同区别在于一个是在子函数中完成,一个是在类中完成。日期设计是这三次作业的难点,难度阶梯式上升,一开始判断闰年及星期几,重点在于闰年的判断,同时求出该日距离0001年1月1日天数(需要考虑闰年的特殊情况)再将其除7通过余数判断星期。再后来需要求前N天,但此时的N的范围限制在了+10到-10,所以只需要考虑一般情况和1号到9号,当月最后9天这类需要翻月或者12月翻年的情况。再后来第三次作业中日期类设计同样包含了前N天和后N天的设计,但此时的N没有了限制,也意味着可能会同时涉及到年月日的变动,并且此时不只是year++,month++,在设计该问题时,我一开始的方法是直接根据N和原来日期算,但在初编写的时候我发现这样的方法会涉及很多种讨论,年月日的变动变得复杂,所以我改变思路,想到之前写过求出该日距离0001年1月1日天数,我考虑先将该日到0001年1月1日天数求出在加上输入的N的出整体的天数,再加到0001年1月1日算出年份(考虑到闰年情况我将4年分为一组共1461天再考虑剩下的年数(一定小于4))再根据剩下的天数分为12个范围(一到十二月)得出最后的天数此过程我多次直接复制了我之前写的相关代码模块,使得工作效率提升。
关于测试,首先是代码正确,在一开始的编程中我直接在PTA上编写,使得编写错误不能及时发现,在使用eclipse中可以直接看到报错,在题目给出源代码是时也可以直接根据源代码的报错来修改。另外是测试点,在考虑编程思路时会着重关注对象的特殊性,如在年月日的考虑中就要重点考虑年月的特殊天数以及翻年翻月的情况,设计测试点也一定会涵盖输入合法,特殊上限下限。
在这两个月的Java学习中明显感觉面对问题思路更加具体,而且细节考虑的更充分,后期的学习将有更多面对对象的复杂问题,不忘初心,砥砺前行。

浙公网安备 33010602011771号