事先聲明,本人僅僅是個計算機領域的新手,不久前開始學習java。后來我接到了一份關于計算兩日期間2月29日總數的編程作業,倉促之中我便寫下了這個程序。由于之前可以說毫無編程經驗,Java也僅僅是只學了一小部分。所以目前該程序尚未解決輸入問題。
我解決這個問題的思路是:
以下是我的代碼:
public class LeapYearComputing
{
//判斷某一年份是否為閏年。
public static boolean leapYear(int y) {
boolean leapYear;
if (y % 4 == 0) {
if(y % 100 == 0) {
if(y % 400 == 0) {
leapYear = true;
}
else {
leapYear = false;
};
}
else {
leapYear = true;
};
}
else {
leapYear = false;
};
return leapYear;
};
//判斷某一日期是否存在,不考慮公元前的年份。
public static boolean dateExist(int year ,int month ,int date) {
boolean dateExist;
if (year > 0 ) {
if (month > 0 && month < 13) {
if (date > 0 && date < 32) {
switch(month) {
case 2:
if (leapYear(year)) {
if (date < 30) {
dateExist = true;
}
else {
dateExist = false;
};
}
else if (date < 29) {
dateExist = true;
}
else {
dateExist = false;
};
break;
case 4:
case 6:
case 9:
case 11:
if (date < 31) {
dateExist = true;
}
else {
dateExist = false;
};
break;
default:
if (date < 32) {
dateExist = true;
}
else {
dateExist = false;
};
};
}
else {
dateExist = false;
};
}
else {
dateExist = false;
};
}
else {
dateExist = false;
};
return dateExist;
};
//計算兩個日期間2月29日數量。
public static void main(String[] args) {
int year1 = 555; //輸入起始年份。
int month1 = 2; //輸入起始月份。
int date1 = 28; //輸入起始日期。
int year2 = 2012; //輸入終止年份。
int month2 = 2; //輸入終止月份。
int date2 = 28; //輸入終止日期。
int result = 0;
int Year = year1 + 1;
if (dateExist(year1,month1,date1)) {
if (dateExist(year2,month2,date2)) {
while (Year < year2 ) {
if (leapYear(Year)) {
result ++;
};
Year ++;
};
if (year1 == year2 && leapYear(year1)) {
result --;
};
if (month1 <= 2 && leapYear(year1)) {
result ++;
};
if (month2 > 2 || (month2 == 2 && date2 == 29) && leapYear(year2)) {
result ++;
}
System.out. }
else {
System.out.println("終止日期并不真實存在。");
};
}
else {
System.out.println("起始日期并不真實存在。");
};
};
}
PS:本程序不考慮公元前年份。我原本考慮公元前的情況,但慮及公元前并無公元紀年,而且關于閏年的定義極有可能不在適用,便把年份限定在公元后。
當起始和終止年份在同一年,且這一年是閏年的情況下,應將閏年數減一。
各位若發現該程序的不足之處或有更好的算法,還望多多指教。
新聞熱點
疑難解答