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”格式返回日期值
 

应用程序共测试三个功能:

  1. 求下n天
  2. 求前n天
  3. 求两个日期相差的天数

         

                 就一而言:   首先输入合法日期,这个合法日期需要我们自己判断,此处较为简单,故省略。

   如果不考虑时间和空间的束缚,可以直接一天一天加,直接得出答案。但是考虑到时间和空间,那么我们首先要判断

   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这种类似的方法判断是否是直角三角形。

                       第四问:判断前两个点构成的直线与后三个点构成的三角形有几个交点,我用了斜率的方法,即利用前两个点中的任意一点与后三个点链接,只要前两个点斜率既不是最大也不是最小时就有两个交点,。特别需要注意,最大最小是指三角形最高点与下两个点的相对位置,不是单纯的斜率大小,所以我们还要判断我们选择的点的位置。

                      第五问: 我也还没做出来,就不献丑了。

                 

posted @ 2022-04-09 23:52  黄文豪大帅比  阅读(62)  评论(0)    收藏  举报