你的位置:首页 > Java教程

[Java教程]计算两日期间2月29日总数的Java程序


  事先声明,本人仅仅是个计算机领域的新手,不久前开始学习Java。后来我接到了一份关于计算两日期间2月29日总数的编程作业,仓促之中我便写下了这个程序。由于之前可以说毫无编程经验,Java也仅仅是只学了一小部分。所以目前该程序尚未解决输入问题。

  我解决这个问题的思路是:

  1. 编写一个方法(leapYear)用于判断某一年份是否为闰年;
  2. 编写另一个方法(dateExist)用于判断某一时期是否真实存在,在这方法中会引用到上个方法;
  3. 最后编写main方法,引用方法(dateExist)分别判断起始日期和终止日期是否真实存在;
  4. 倘若均真实存在。假如起始和终止日期不在同一年,这对起始和终止年份之间的年份枚举,把闰年总数计算出来,在这过程中引用方法(leapYear);不真实存在则显示提示。
  5. 最后判断起始和终止年份是否为闰年及起始/终止月份是否小于/大于2月,并把符合条件的2月29日算出,在这过程中也须引用方法leapYear。

  

  以下是我的代码:

 1 public class LeapYearComputing 2 { 3   //判断某一年份是否为闰年。 4   public static boolean leapYear(int y) {  5     boolean leapYear; 6     if (y % 4 == 0) { 7       if(y % 100 == 0) { 8         if(y % 400 == 0) { 9           leapYear = true; 10         } 11         else { 12           leapYear = false; 13         }; 14       } 15       else { 16         leapYear = true; 17       }; 18     } 19     else { 20       leapYear = false; 21     }; 22     return leapYear; 23   }; 24    25   //判断某一日期是否存在,不考虑公元前的年份。 26   public static boolean dateExist(int year ,int month ,int date) { 27     boolean dateExist; 28     if (year > 0 ) { 29       if (month > 0 && month < 13) { 30         if (date > 0 && date < 32) { 31           switch(month) { 32             case 2: 33             case 4: 34             case 6: 35             case 9: 36             case 11: 37               if (date < 31) { 38                 if (month == 2) { 39                   if (leapYear(year)) { 40                     if (date < 30) { 41                       dateExist = true; 42                     } 43                     else { 44                       dateExist = false; 45                     }; 46                   } 47                   else if (date < 29) { 48                     dateExist = true; 49                   } 50                   else { 51                     dateExist = false; 52                   }; 53                 } 54                 else if (date < 31) { 55                   dateExist = true; 56                 } 57                 else { 58                   dateExist = false; 59                 }; 60               } 61               else { 62                 dateExist = false; 63               }; 64               break; 65             default: 66               if (date < 32) { 67                 dateExist = true; 68               } 69               else { 70                 dateExist = false; 71               }; 72           }; 73         } 74         else { 75           dateExist = false; 76         }; 77       } 78       else { 79         dateExist = false; 80       }; 81     } 82     else { 83       dateExist = false; 84     }; 85     return dateExist; 86    }; 87    88   //计算两个日期间2月29日数量。 89   public static void main(String[] args) { 90     int year1 = 2013;       //输入起始年份。 91     int month1 = 9;       //输入起始月份。 92     int date1 = 28;       //输入起始日期。 93     int year2 = 2015;       //输入终止年份。 94     int month2 = 1;       //输入终止月份。 95     int date2 = 3;       //输入终止日期。 96     int result = 0; 97     int Year = year1 + 1; 98     if (dateExist(year1,month1,date1)) {            99       if (dateExist(year2,month2,date2)) {         100         while (Year < year2 ) {101           if (leapYear(Year)) {102             result ++;103           };104           Year ++;105         };106         if (year1 == year2) {107           result --;108         };109         if (month1 <= 2) {110           if (leapYear(year1)) {111             result ++;112           };113         };114         if (month2 > 2) {115           if (leapYear(year2)) {116             result ++;117           };118         };119         System.out.println("两个日期之间有" + result + "个2月29日");120       }121       else {122         System.out.println("终止日期并不真实存在。");123       };124     }125     else {126       System.out.println("起始日期并不真实存在。");127     };128     129     130     131   132   };133 }

  PS:本程序不考虑公元前年份。我原本考虑公元前的情况,但虑及公元前并无公元纪年,而且关于闰年的定义极有可能不在适用,便把年份限定在公元后。

    当起始和终止年份在同一年,且这一年是闰年的情况下,应将闰年数减一。

  各位若发现该程序的不足之处或有更好的算法,还望多多指教。