BLOG作业一
日期类设计一总结:
首先题目要求是
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”格式返回日期值
应用程序共测试三个功能:
- 求下n天
- 求前n天
- 求两个日期相差的天数
就一而言: 首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。
如果不考虑时间和空间的束缚,可以直接一天一天加,直接得出答案。但是考虑到时间和空间,那么我们首先要判断
n的大小,即n是否大于一年的天数,如果是,那么就要判断输入日期中的year是闰年还是平年。如果是闰年则year++,
n-366,由此往下推,直到n小于366或365后,就进入到我们的下一步,即一天一天加。
一天一天加的时候我们要注意,day是否大于本月最多的天数,如果是则month++,但是存在特殊情况那就是闰年
二月与平年二月的区别,故首先判断年再判断月最后判断天数,month>12,则year++,day=1.
就二而言:
首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。
如果不考虑时间和空间的束缚,可以直接一天一天减,直接得出答案。但是考虑到时间和空间,那么我们首先要判断
n的大小,即n是否大于一年的天数,如果是,那么就要判断输入日期中的year是闰年还是平年。如果是闰年则year--,
n-366,由此往下推,直到n小于366或365后,就进入到我们的下一步,即一天一天减。
一天一天减的时候我们要注意,day是否为零,如果是则month--,但是存在特殊情况那就是闰年
二月与平年二月的区别,故首先判断年再判断月最后判断天数,month=0,则year--,day=31.
就三而言:
首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。
如果不考虑时间和空间的束缚,可以直接一天一天加,直接得出答案。但是考虑到时间和空间,那么我们首先要判断
两个日期之间year差的大小,即差是否大于一,如果是,那么就要判断输入日期中的year之间是闰年的个数。
n-366,由此往下推,直到n小于366或365后,就进入到我们的下一步,即一天一天加。
一天一天加的时候我们要注意,day是否大于本月最多的天数,如果是则month++,但是存在特殊情况那就是闰年
二月与平年二月的区别,故首先判断年再判断月最后判断天数,month>12,则year++,day=1。
最后结束时应为year==year1.month==month1,day==day1.
日期类设计二总结:
题目与一同但要求根据如下类图编程:

一: 首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。 如果不考虑时间和空间的束缚,可以直接一天一天加,直接得出答案。但是考虑到时间和空间,那么我们首先要判 n的大小,即n是否大于一年的天数,如果是,那么就要判断输入日期中的year是闰年还是平年。如果是闰年则year++,
n-366,由此往下推,直到n小于366或365后,就进入到我们的下一步,即一天一天加。 一天一天加的时候我们要注意,day是否大于本月最多的天数,如果是则month++,但是存在特殊情况那就是闰年
二月与平年二月的区别,故首先判断年再判断月最后判断天数,month>12,则year++,day=1.
二:
首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。如果不考虑时间和空间的束缚,可以直接一天一天减,直接得出答案。但是考虑到时间和空间,那么我们首先要判断n的大小,即n是否大于一年的天数,如果是,那么就要判断输入日期中的year是闰年还是平年。如果是闰年则year--,n-366,由此往下推,直到n小于366或365后,就进入到我们的下一步,即一天一天减。一天一天减的时候我们要注意,day是否为零,如果是则month--,但是存在特殊情况那就是闰年
二月与平年二月的区别,故首先判断年再判断月最后判断天数,month=0,则year--,day=31.
三:
首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。如果不考虑时间和空间的束缚,可以直接一天一天加,直接得出答案。但是考虑到时间和空间,那么我们首先要判断两个日期之间year差的大小,即差是否大于一,如果是,那么就要判断输入日期中的year之间是闰年的个数。n-366,由此往下推,直到n小于366或365后,就进入到我们的下一步,即一天一天加。 一天一天加的时候我们要注意,day是否大于本月最多的天数,如果是则month++,但是存在特殊情况那就是闰年
二月与平年二月的区别,故首先判断年再判断月最后判断天数,month>12,则year++,day=1。
最后结束时应为year==year1.month==month1,day==day1.
四: 类图要求解析:
Day类中成员变量只能有 1. int类型的变量value 2.Month类型的变量month,实际上month是一个Month类的对象 3.int类型的数组用于存放每个月的天数
Day类中的构造器(重载)有两个 分别是 Day() 和 Day(int yearValue , int monthValue,int dayValue)
Day类中的成员方法 int getValue(); void setValue(int value); Month getMonth(); void setMonth(Month value); void resetMin(); void resetMax(); boolean validate(); void dayIncrement(); void dayReduction();
Month类中成员变量只能有 1. int类型的变量value 2.Month类型的变量month,实际上month是一个Month类的对象
Month类中的构造器(重载)有两个 分别是 public Month() 和 public Day(int yearValue , int monthValue,int dayValue)
Month类中的成员方法 int getValue(); void setValue(int value); Month getMonth(); void setMonth(Month value); void resetMin(); void resetMax(); boolean validate(); void dayIncrement(); void dayReduction();
Year类中成员变量只能有 1. int类型的变量value 2.Month类型的变量month,实际上month是一个Month类的对象
Year类中的构造器(重载)有两个 分别是 public Year() 和 public Year(int yearValue , int monthValue,int dayValue)
Year类中的成员方法 int getValue(); void setValue(int value); Month getMonth(); void setMonth(Month value); void resetMin(); void resetMax(); boolean validate(); void dayIncrement(); void dayReduction();
日期类设计 三:

首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。 如果不考虑时间和空间的束缚,可以直接一天一天加,直接得出答案。但是考虑到时间和空间,那么我们首先要判 n的大小,即n是否大于一年的天数,如果是,那么就要判断输入日期中的year是闰年还是平年。如果是闰年则year++,
n-366,由此往下推,直到n小于366或365后,就进入到我们的下一步,即一天一天加。 一天一天加的时候我们要注意,day是否大于本月最多的天数,如果是则month++,但是存在特殊情况那就是闰年
二月与平年二月的区别,故首先判断年再判断月最后判断天数,month>12,则year++,day=1.
首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。如果不考虑时间和空间的束缚,可以直接一天一天减,直接得出答案。但是考虑到时间和空间,那么我们首先要判断n的大小,即n是否大于一年的天数,如果是,那么就要判断输入日期中的year是闰年还是平年。如果是闰年则year--,n-366,由此往下推,直到n小于366或365后,就进入到我们的下一步,即一天一天减。一天一天减的时候我们要注意,day是否为零,如果是则month--,但是存在特殊情况那就是闰年
二月与平年二月的区别,故首先判断年再判断月最后判断天数,month=0,则year--,day= 首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。如果不考虑时间和空间的束缚,可以直接一天一天加,直接得出答案。但是考虑到时间和空间,那么我们首先要判断两个日期之间year差的大小,即差是否大于一,如果是,那么就要判断输入日期中的year之间是闰年的个数。n-366,由此往下推,直到n小于366或365后,就进入到我们的下一步,即一天一天加。 一天一天加的时候我们要注意,day是否大于本月最多的天数,如果是则month++,但是存在特殊情况那就是闰年
二月与平年二月的区别,故首先判断年再判断月最后判断天数,month>12,则year++,day=1。
四: 类图要求解析:
Day类中成员变量只能有 1. int类型的变量value
Day类中的构造器(重载)有两个 分别是 Day() 和 Day(int yearValue , int monthValue,int dayValue)
Day类中的成员方法 int getValue(); void setValue(int value); Month getMonth(); void setMonth(Month value); void resetMin(); void resetMax(); boolean validate(); void dayIncrement(); void dayReduction();
Month类中成员变量只能有 1. int类型的变量value 2.Month类型的变量month,实际上month是一个Month类的对象
Month类中的构造器(重载)有两个 分别是 public Month() 和 public Day(int yearValue , int monthValue,int dayValue)
Month类中的成员方法 int getValue(); void setValue(int value); Month getMonth(); void setMonth(Month value); void resetMin(); void resetMax(); boolean validate(); void dayIncrement(); void dayReduction();
Year类中成员变量只能有 1. int类型的变量value 2.Month类型的变量month,实际上month是一个Month类的对象
Year类中的构造器(重载)有两个 分别是 public Year() 和 public Year(int yearValue , int monthValue,int dayValue)
Year类中的成员方法 int getValue(); void setValue(int value); Month getMonth(); void setMonth(Month value); void resetMin(); void resetMax(); boolean validate(); void dayIncrement(); void dayReduction();
点线形系列1-计算两点之间的距离
输入格式:
4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。
若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。
计算两点距离很简单,但是判断输入合法还是不合法比较麻烦。
本人还是推荐使用正则表达式,具体如下
String regStr = "([\\+\\-]?([0]|[1-9]+))(\\.\\d+)?\\,([\\+\\-]?([0]|[1-9]+))(\\.\\d+)?(\\s([\\+\\-]?([0]|[1-9]+))(\\.\\d+)?\\,([+\\-]?([0]|[1-9]+))(\\.\\d+)?)+";
if (str.matches(regStr)) {
flag=0;
} else {
flag=1;
}
if(flag==1){
System.out.printf("Wrong Format");
return;
}
点线形系列2-线的计算
用户输入一组选项和数据,进行与直线有关的计算。选项包括:
1:输入两点坐标,计算斜率,若线条垂直于X轴,输出"Slope does not exist"。
2:输入三个点坐标,输出第一个点与另外两点连线的垂直距离。
3:输入三个点坐标,判断三个点是否在一条线上,输出true或者false。
4:输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false.
5:输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,x、y坐标之间以英文分隔",",并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false),判断结果与坐标之间以一个英文空格分隔。若两条线平行,没有交叉点,则输出"is parallel lines,have no intersection point"。
输入格式:
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。
例如:1:0,0 1,1
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
不论哪个选项,如果格式、点数量都符合要求,但构成任一条线的两个点坐标重合,输出"points coincide",
1,2,3,4,5问都具有一段相同判断代码计算特殊情况
if(x1==x2&&y1==y2||x2==x3&&y2==y3||x1==x3&&y1==y3){
System.out.print("data error");
return;
} //斜率不存在
if(x1==x2&&x1==x3){
System.out.print("data error");
return;
}
if(y1==y2&&y1==y3){
System.out.print("data error");
return;
}
if((y2-y1)/(x2-x1)==(y3-y2)/(x3-x2)){
System.out.print("data error");
return; //斜率存在但是三点共线
}
第一问:看似简单,但是特别需要注意的是细节,因为要判断的是等边还是非等边,是等腰还是非等腰,而不是判断是等边还是等腰,这区别非常大,一开始没有看清楚题目要求,后面不论你自己怎么改怎么觉得自己没问题,都无法过测试点。
第二问:简单,只要数学基础好些都能做出,此处不解释,
第三问: 看似与第一问相同,但是判断直角三角形的时候一定要注意,因为一开始我们求边长的时候已经开过一次根,就是存在了误差,所以我们后面用数学公式的时候不能直接用等号判断,而因该 利用误差,即a+b-c<0.01这种类似的方法判断是否是直角三角形。
第四问:判断前两个点构成的直线与后三个点构成的三角形有几个交点,我用了斜率的方法,即利用前两个点中的任意一点与后三个点链接,只要前两个点斜率既不是最大也不是最小时就有两个交点,。特别需要注意,最大最小是指三角形最高点与下两个点的相对位置,不是单纯的斜率大小,所以我们还要判断我们选择的点的位置。
第五问: 我也还没做出来,就不献丑了。
浙公网安备 33010602011771号