2011-01-25 86 views
2

當我運行程序時,這是兩天休息時間。任何關於我做錯的建議?日期之間的日期Java(作業)

我知道有一個更簡單的方法來做到這一點,但爲此,我試圖顯示所有的實際步驟,找到之間的日子。

家庭作業分配,所以不能使用日期時間庫。

public class DaysBetween { 

    public static void main (String []args) { 

     long months1 = Long.parseLong(args[0]); 
     long days1 = Long.parseLong(args[1]); 
     long year1 = Long.parseLong(args[2]); 
     long months2 = Long.parseLong(args[3]); 
     long days2 = Long.parseLong(args[4]); 
     long year2 = Long.parseLong(args[5]); 

     long daysbetween = 0; 
     long leapyearcounter = 0; 
     boolean leapyear1 = false; 
     boolean leapyear2 = false;  
     boolean valid1 = true; 
     boolean valid2 = true; 
     int earlier = 0; 

     // this tests to see which date is earlier 
     if (year1 == year2){ 
      if (months1 == months2) { 
       if (days1 == days2) { 
        daysbetween = daysbetween; 
       } else if (days1 < days2) { 
        earlier = 1; 
       } 
      } else if (months1 < months2) { 
      earlier = 1; 
      } 
     } else if (year1 < year2) { 
      earlier = 1; 
     } 

     // this switches the dates depending on which is earlier 
     switch(earlier) { 
     case 1: months1 = Long.parseLong(args[0]); 
      days1 = Long.parseLong(args[1]); 
      year1 = Long.parseLong(args[2]); 
      months2 = Long.parseLong(args[3]); 
      days2 = Long.parseLong(args[4]); 
      year2 = Long.parseLong(args[5]); 
     break; 
     default: 
      months1 = Long.parseLong(args[3]); 
      days1 = Long.parseLong(args[4]); 
      year1 = Long.parseLong(args[5]); 
      months2 = Long.parseLong(args[0]); 
      days2 = Long.parseLong(args[1]); 
      year2 = Long.parseLong(args[2]); 
     break; 
     } 

     //this section tests if the earlier date is valid 
     if((year1 % 4 == 0) && (year1 % 100 != 0) || (year1 % 400 == 0)) { 
      leapyear1 = true; 
     } 

     if ((leapyear1 == true) && (months1 == 2)) { 
      if (days1 <= 29 && days1 >=1){ 
       valid1 = true; 
      } 
     } else if ((leapyear1 == false) && (months1 == 2)){ 
      if (days1 <= 28 && days1 >= 1){ 
       valid1 = true; 
      } 
     } 

     if (months1 != 2) { 
      if (months1 < 8) { 
       if (months1 %2 != 0) { 
        if (days1 <= 31 && days1 >=1){ 
         valid1 = true; 
        } else { 
         valid1 = false; 
        } 
       } else if (months1 %2 == 0) { 
        if (days1 <= 30 && days1 >=1){ 
         valid1 = true; 
        } else { 
         valid1 = false; 
        } 
       } 
      } else if (months1 > 8) { 
       if (months1 %2 != 0) { 
        if (days1 <= 30 && days1 >=1){ 
         valid1 = true; 
        } else { 
         valid1 = false; 
        } 
       } else if (months1 %2 == 0) { 
        if (days1 <= 31 && days1 >=1){ 
         valid1 = true; 
        } else { 
         valid1 = false; 
        } 
       } 
      } 
     } 

     // this section tests if the later date is valid 
     if((year2 % 4 == 0) && (year2 % 100 != 0) || (year2 % 400 == 0)) { 
      leapyear2 = true; 
     } 

     if ((leapyear2 == true) && (months2 == 2)) { 
      if (days2 <= 29 && days2 >=1){ 
       valid2 = true; 
      } 
     } else if ((leapyear2 == false) && (months2 == 2)){ 
      if (days2 <= 28 && days2 >= 1){ 
       valid2 = true; 
      } 
     } 

     if (months2 != 2) { 
      if (months2 < 8) { 
       if (months2 %2 != 0) { 
        if (days2 <= 31 && days2 >=1){ 
         valid2 = true; 
        } else { 
         valid2 = false; 
        } 
       } else if (months2 %2 == 0) { 
        if (days2 <= 30 && days2 >=1){ 
         valid2 = true; 
        } else { 
         valid2 = false; 
        } 
       } 
      } else if (months2 > 8) { 
       if (months2 %2 != 0) { 
        if (days2 <= 30 && days2 >=1){ 
         valid2 = true; 
        } else { 
         valid2 = false; 
        } 
       } else if (months2 %2 == 0) { 
        if (days2 <= 31 && days2 >=1){ 
         valid2 = true; 
        } else { 
         valid2 = false; 
        } 
       } 
      } 
     } 

     //this adds a day to the total if the earlier date is in january & its a leap year 
     if ((months1 == 1) && (leapyear1 == true)) { 
      daysbetween = daysbetween +1; 
     } 

     //this adds the months left in year1 
     if (months1 == 1) { 
      daysbetween = daysbetween + 334; 
     } else if (months1 == 2) { 
      daysbetween = daysbetween + 306; 
     } else if (months1 == 3) { 
      daysbetween = daysbetween + 275; 
     } else if (months1 == 4) { 
      daysbetween = daysbetween + 245; 
     } else if (months1 == 5) { 
      daysbetween = daysbetween + 214; 
     } else if (months1 == 6) { 
      daysbetween = daysbetween + 184; 
     } else if (months1 == 7) { 
      daysbetween = daysbetween + 153; 
     } else if (months1 == 8) { 
      daysbetween = daysbetween + 122; 
     } else if (months1 == 9) { 
      daysbetween = daysbetween + 92; 
     } else if (months1 == 10) { 
      daysbetween = daysbetween + 61; 
     } else if (months1 == 11) { 
      daysbetween = daysbetween + 31; 
     } else { } 

     // this adds the extra day if year2 is leap year and if the month is march or later 
     if ((months2 >= 3) && (leapyear2 = true)) { 
      daysbetween = daysbetween + 1; 
     } 

     // this adds the months up to the month in year2 
     if (months2 == 1) { 
      daysbetween = daysbetween; 
     } else if (months2 == 2) { 
      daysbetween = daysbetween + 31; 
     } else if (months2 == 3) { 
      daysbetween = daysbetween + 59; 
     } else if (months2 == 4) { 
      daysbetween = daysbetween + 90; 
     } else if (months2 == 5) { 
      daysbetween = daysbetween + 120; 
     } else if (months2 == 6) { 
      daysbetween = daysbetween + 151; 
     } else if (months2 == 7) { 
      daysbetween = daysbetween + 181; 
     } else if (months2 == 8) { 
      daysbetween = daysbetween + 212; 
     } else if (months2 == 9) { 
      daysbetween = daysbetween + 243; 
     } else if (months2 == 10) { 
      daysbetween = daysbetween + 273; 
     } else if (months2 == 11) { 
      daysbetween = daysbetween + 304; 
     } else if (months2 == 12) { 
      daysbetween = daysbetween + 334; 
     } else { } 

     //this add the days left in month1 
     if (months1 != 2) { 
      if (months1 < 8) { 
       if (months1 %2 != 0) { 
        daysbetween = daysbetween + (31 - days1); 
       } else if (months1 %2 == 0) { 
        daysbetween = daysbetween + (30 - days1); 
       } 
      } else if (months1 > 8) { 
       if (months1 %2 != 0) { 
        daysbetween = daysbetween + (30 - days1); 
       } else if (months1 %2 == 0) { 
        daysbetween = daysbetween + (31 - days1); 
       } 
      } 
     } 

     // this add the days left in month1 if its feb 
     if ((leapyear1 == true) && (months1 == 2)) { 
      daysbetween = daysbetween + (29 - days1); 
     } else { 
      daysbetween = daysbetween + (28 - days1); 
     } 

     daysbetween = daysbetween + days2; // adds the days left in month2 
     daysbetween = daysbetween + ((((year2-1)-(year1+1))+1)*365); // adds the days in the years to the total 

     for (long i = (year1+1); i < (year2-1) ; i++) { // sees the # of leapyears b/n year1 & year2 
      if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0)) { 
       leapyearcounter++; 
      } 
     } 

     daysbetween = daysbetween + leapyearcounter; // adds the leapyear days 

     if ((valid1 == false) || (valid2 == false)) { 
      System.out.println("Sorry! You gave me one or more invalid dates!"); 
     } else if (daysbetween == 1){ 
      System.out.println("There is " + daysbetween + " day between those two dates!"); 
     } else if (daysbetween != 1) { 
      System.out.println("There are " + daysbetween + " days between those two dates!"); 
     } else if (daysbetween == 0) { 
      System.out.println("There are no days between those two dates!"); 
     } 
    } 
} 
+1

請改正你的代碼格式 – shybovycha 2011-01-25 10:25:10

+0

我的眼睛...他們傷害了... aarrrhhh – 2011-01-25 10:45:48

+0

老實說,我的PIC ASM項目計算兩個日期之間的天數差不多有300 LOC(包括它的所有評論),而你的Java !!!)一個有將近250 =) – shybovycha 2011-01-25 10:47:21

回答

1

還有很多需要在這裏說,但我建議你通過重構這個怪物變成許多更小的方法,你可以單獨測試開始。由於數量巨大,您的代碼難以閱讀,理解和調試。 「分解」是操作詞。

您的主要方法應該只包含驅動程序或測試代碼。

你應該有像boolean isValid(Date date)boolean before(Date d1, Date d2)boolean isLeapYear(int year)的方法。單獨測試這些並開始建立你想要的。

7

除非這個功課,或只是你要去我可以建議使用您的所有日期時間計算的joda time library一些自我傷害的事:

時間使用喬達答案:〜22分鐘

1

使用的java .util.Date:(date1.getTime() - date2.getTime())/(1000 * 60 * 60 * 24)。