106. 跑步锻炼(结果填空)

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方法,用于判断给定的日期(年、月、日)是否是周一。下面是对这段代码的详细解释:

  1. 方法定义:

private static boolean isMonday(int year, int month, int day)

这个方法接收三个整数参数:year(年份)、month(月份)和day(日期)。方法的返回类型是boolean,即它会返回truefalse,表示给定的日期是否是周一。
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方法会根据传入的年、月、日参数来判断那天是否是周一,并返回相应的布尔值。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值