标签:
事先声明,本人仅仅是个计算机领域的新手,不久前开始学习Java。后来我接到了一份关于计算两日期间2月29日总数的编程作业,仓促之中我便写下了这个程序。由于之前可以说毫无编程经验,Java也仅仅是只学了一小部分。所以目前该程序尚未解决输入问题。
我解决这个问题的思路是:
以下是我的代码:
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:本程序不考虑公元前年份。我原本考虑公元前的情况,但虑及公元前并无公元纪年,而且关于闰年的定义极有可能不在适用,便把年份限定在公元后。
当起始和终止年份在同一年,且这一年是闰年的情况下,应将闰年数减一。
各位若发现该程序的不足之处或有更好的算法,还望多多指教。
标签:
原文地址:http://www.cnblogs.com/gsllchb/p/4899335.html