1. 程式人生 > java教程 > 計算兩日期間2月29日總數的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:本程式不考慮公元前年份。我原本考慮公元前的情況,但慮及公元前並無公元紀年,而且關於閏年的定義極有可能不在適用,便把年份限定在公元后。

當起始和終止年份在同一年,且這一年是閏年的情況下,應將閏年數減一。

各位若發現該程式的不足之處或有更好的演算法,還望多多指教。