事先声明,本人仅仅是个计算机领域的新手,不久前开始学习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.PRintln("两个日期之间有" + result + "个2月29日");
}
else {
System.out.println("终止日期并不真实存在。");
};
}
else {
System.out.println("起始日期并不真实存在。");
};
};
}
PS:本程序不考虑公元前年份。我原本考虑公元前的情况,但虑及公元前并无公元纪年,而且关于闰年的定义极有可能不在适用,便把年份限定在公元后。
当起始和终止年份在同一年,且这一年是闰年的情况下,应将闰年数减一。
各位若发现该程序的不足之处或有更好的算法,还望多多指教。
新闻热点
疑难解答