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
方法会根据传入的年、月、日参数来判断那天是否是周一,并返回相应的布尔值。