Java 统计星期一的个数

该博客探讨了如何计算1901年至2000年间有多少个星期一。提供了两种不同的Java代码实现,一种是通过计算总天数和每周的星期一来得出结果,另一种是使用Calendar类逐天累加并统计星期一的数量。这两种方法都考虑了闰年的判断,并最终给出了准确的星期一计数。
摘要由CSDN通过智能技术生成

问题

星期一
整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一

解题

一般解法

    /**
     * 星期一
     * 整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一
     *
     * 提示:
     * 非整百的年份除以4,或者整百的年份除以400,若不能整除的,即为平年
     *
     * 判断1901年1月1日到2000年12月31的每一天是星期几,如果是星期一则统计的个数+1。
     */
    public static void countMondayNumber(){
        Calendar instance = Calendar.getInstance();
        instance.set(1901, 0, 1);
        System.out.println(instance.get(Calendar.DAY_OF_WEEK));
        int allDays = 0;
        for (int i = 1901; i <= 2000; i++){
            // 非整百年能被4整除 或者 能被400整除 则为闰年
            if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)){
                allDays += 366;
            }else{
                allDays += 365;
            }
        }
        // 1901-1-1 为周三
        allDays -= 4;
        // 接下来的第一天就是星期一
        int countMonday = 1;
        // 每次加一周
        for (int i = 1; i <= allDays - 7; i += 7){
            countMonday ++;
        }
        System.out.println(countMonday);
    }

Calendar 解法二

    public static void countMondayNumber2(){
        Calendar instance = Calendar.getInstance();
        instance.set(1901, 0, 1);
        System.out.println(instance.get(Calendar.DAY_OF_WEEK));

        int mondayCount = 0;
        while (true){
            // 不断增加一天
            instance.add(Calendar.DAY_OF_YEAR, 1);
            // 周一数量加一
            if (instance.get(Calendar.DAY_OF_WEEK) == 1){
                mondayCount++;
            }
            // 是否是 2000-12-31
            boolean equalDate = instance.get(Calendar.YEAR) == 2000 && instance.get(Calendar.MONTH) == 11 && instance.get(Calendar.DAY_OF_MONTH) == 31;
            if (equalDate){
                break;
            }
        }
        System.out.println(mondayCount);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值