首页 > 学院 > 开发设计 > 正文

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

2019-11-14 15:21:23
字体:
来源:转载
供稿:网友

  事先声明,本人仅仅是个计算机领域的新手,不久前开始学习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) {
      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:本程序不考虑公元前年份。我原本考虑公元前的情况,但虑及公元前并无公元纪年,而且关于闰年的定义极有可能不在适用,便把年份限定在公元后。

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表