爱程序网

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

来源: 阅读:

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

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

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

  

  以下是我的代码:

public class LeapYearComputing
{
    //判断某一年份是否为闰年。
public static boolean leapYear(int y) {
    boolean leapYear;
    if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
        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 = 9011;           //请输入起始年份。
    int month1 = 12;             //请输入起始月份。
    int date1 = 29;             //请输入起始日期。
    int year2 = 12012;           //起输入终止年份。
    int month2 = 2;             //请输入终止月份。
    int date2 = 29;             //请输入终止日期。
    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("两日期之间的2月29日有" + result + "个。");
        }
        else {
            System.out.println("终止日期并不真实存在!");
        };
    }
    else {
        System.out.println("起始日期并不真实存在!");
        };
    };
}

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

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

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

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助