public class Main { public static void main(String[] args) { int startYear = 2000; int startMonth = 1; int startDay = 1; // 周六 int endYear = 2020; int endMonth = 10; int endDay = 1; // 周四 int totalDistance = 0; // 计算开始日期到结束日期之间的每一天 for (int year = startYear; year <= endYear; year++) { for (int month = (year == startYear) ? startMonth : 1; month <= (year == endYear) ? endMonth : 12; month++) { int daysInMonth = getDaysInMonth(year, month); for (int day = (year == startYear && month == startMonth) ? startDay : 1; day <= (year == endYear && month == endMonth) ? endDay : daysInMonth; day++) { // 检查是否是周一或者月初(1日) if (day == 1 || isMonday(year, month, day)) { totalDistance += 2; } else { totalDistance += 1; } } } } System.out.println(totalDistance); // 输出总距离 } // 获取某年某月的天数,考虑闰年 private static int getDaysInMonth(int year, int month) { switch (month) { case 2: // 2月 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 29; // 闰年 } else { return 28; // 非闰年 } case 4: case 6: case 9: case 11: return 30; default: return 31; } } // 判断某天是否是周一 private static boolean isMonday(int year, int month, int day) { Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, day); // 注意Calendar的月份是从0开始的 return calendar.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY; }
}
这段代码使用getDaysInMonth
方法来获取每个月的天数,考虑了闰年的情况。isMonday
方法用于判断某一天是否是周一。代码通过遍历从起始日期到结束日期之间的每一天,并根据题目的规则来计算总跑步距离。
请注意,在Java中,Calendar
类的月份是从0开始的,因此在调用calendar.set
方法时,需要将月份减1。此外,这段代码假设起始日期是周六,结束日期是周四,因此不需要对起始和结束日期进行额外的处理。如果起始或结束日期不是周末,那么可能需要额外的逻辑来处理这些边界情况。
这段代码定义了一个isMonday
方法,用于判断给定的日期(年、月、日)是否是周一。下面是对这段代码的详细解释:
-
方法定义:
private static boolean isMonday(int year, int month, int day) |
这个方法接收三个整数参数:year
(年份)、month
(月份)和day
(日期)。方法的返回类型是boolean
,即它会返回true
或false
,表示给定的日期是否是周一。
2. 创建Calendar实例:
Calendar calendar = Calendar.getInstance(); |
Calendar是Java中用于处理日期和时间的类。
Calendar.getInstance()方法返回当前日期和时间的
Calendar`对象。
3. 设置日期:
calendar.set(year, month - 1, day); |
这里,我们使用calendar.set
方法来设置Calendar
对象的日期。需要注意的是,Calendar
类的月份是从0开始的,即1月对应的是0,2月对应的是1,依此类推。因此,我们需要将传入的month
参数减1,以确保设置正确的月份。
4. 判断是否是周一:
return calendar.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY; |
Calendar.DAY_OF_WEEK是一个字段,用于表示一周中的某天。它返回一个整数,其中
Calendar.SUNDAY是1,
Calendar.MONDAY是2,依此类推,直到
Calendar.SATURDAY`是7。
calendar.get(Calendar.DAY_OF_WEEK)
会返回calendar
对象所表示的那一天的整数值。然后,我们检查这个值是否等于Calendar.MONDAY
(即2)。如果相等,表示那天是周一,方法返回true
;否则,返回false
。
综上所述,isMonday
方法会根据传入的年、月、日参数来判断那天是否是周一,并返回相应的布尔值。