FC第一次博客作业

一、前言

oop训练集一中主要考察了Java的基础知识,例如:Java的基本类型,如何定义变量,流程控制语句等基础知识,除外还有字符串的操作等,题目量相对较多,难度相对较低,属于是Java入门练手题。

oop训练集二中主要考察了数据类型转换和字符串的操作,题目量相对中等,难度相对较低,也属于练手类型。

oop训练集三中主要考察了Java的基础语法:类的定义及使用和方法的定义及使用,题目量相对较少,难度相对较高,是Java语法的训练题。

二、设计与分析

1、oop训练集三中的7-3

题目需要的Date如下:

以下即为此题的主函数部分,其中含有输入一个日期后判断其是否为合法日期,是则输出其下一天的日期,否则输出“Date Format is Wrong”。

 

 

Date类中get方法部分即都为返回此对象的一个属性,set方法部分都为此对象的一个属性赋值。

以下为isLeapYear方法(判断是否为闰年):

算法即为若year除以400的余数为0或者除以4的余数为0的同时除以100的余数不为0,此year为闰年,否则不为闰年。

以下为checkInputValidity方法(判断输入日期是否合法):

 

 

算法即为year的范围在1900和2000之间,月份在1和12之间,日期在1和数组对应的数之间,若满足条件则为合法日期,否则为不合法日期。

 

以下为getNextDate方法:

 

 

 

算法即为用一个switch判断月份,特别注意2月份和12月份,其他月份注意是否为最后一天,2月份要判断是否为闰年。

2、oop训练集三中的7-4

 

 

public boolean checkInputValidity();//检测输入的年、月、日是否合法
public boolean isLeapYear(int year);//判断year是否为闰年
public DateUtil getNextNDays(int n);//取得year-month-day的下n天日期
public DateUtil getPreviousNDays(int n);//取得year-month-day的前n天日期
public boolean compareDates(DateUtil date);//比较当前日期与date的大小(先后)
public boolean equalTwoDates(DateUtil date);//判断两个日期是否相等
public int getDaysofDates(DateUtil date);//求当前日期与date之间相差的天数
public String showDate();//以“year-month-day”格式返回日期值

以上为此题所要写的方法。

isLeapYear方法和上题一样的算法,checkInputValidity方法和上题相似。equalTwoDates方法即为同时比较两天的年月日即可。

showDate方法如下:使用valueOf函数

 

compareDates方法如下:按年月日的先后比较即可

 

getDaysofDates方法如下:

 

 先将date和this中的日期进行简单比较,将大的年份赋值给last,小的年份赋值给first,先算年份差距,然后假设全为平年,用数组储存每个月份所含的日数,用循环算出两个日期的月份间的日数,此时要判断这两个日期是否为闰年同时日期计算是否涉及到了2月份,进行加减,以全部平年算出相距日期,最后算其中包含了几次闰年,就加几天。

getPreviousNDays方法如下:

 

 此方法注意在每次进行往前推日期的时候进入前一年时,要重新判断是否为闰年,是的话改数组下标为2的值为29,否则改为28,lastDay为现在的日期,numDay为上一个月的日数。往前推时先将月份-1,而后numDay=numDay-lastDay,最后将数组中此月份的日数赋值给lastDay。

getNextNDays方法如下:

 

 

 

 此算法与上一方法相似,不过前半部分的判断部分不一样。

三、踩坑心得

1、在oop训练集三中的7-4的求日期差和最小值测试中,忘了靠前日期中包含2月的影响和下n天的n为0的情况,这几次错误让我知道在编程之前应该先把所有情况列出,想好算法再开始

 

 

 

2、在oop训练集一中总忘在main()中加入String args[],会造成非零返回。

3、float和double的精度问题需要注意。

4、在设计类时,应该考虑好类里面应该有的属性和方法。

5、类中方法除了传入的对象属性只能调用该对象的属性。

四、改进建议

在oop训练集三中的7-4中的求后n天中,我应该可以考虑将其设置的循环少一次,将考虑闰年的语句加入进去,算法可以精炼点。

 

五、总结

在这三次训练集中,我学到了Java基础语法的基础使用,如类的定义与使用,同时我了解了Java的基本知识,如数组的定义,arraylist的基本语法。我认为我需要改进的地方有:算法的不精炼,复杂度偏高;构思不严谨,有的细节容易漏;不习惯随手写注释,使得每次更改都得看一眼这里的算法是怎么样的;字符串的一些方法没有了解,不够熟练,如字符串与数组的转换等。我对老师的教学方法没有意见。

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

 

 

 

 

 

 

 

 

 

posted @ 2023-03-26 20:08  Felix_C  阅读(25)  评论(0)    收藏  举报