使用 java 基础语言实现万年历

简介: 已知(只有一个已知条件):1900年1月1号是星期一实现的功能:通过本条件来写一个输入相应的年份和月份就可以在控制台输出相应月份月历基本的思路:已知1900年的1月1日是周一,要输出这个月的月历首先最需要知道的就是本月1号是周几,这样我们才可以排列出来这个月的月历第一天的位置 ...

已知(只有一个已知条件):

  • 1900年1月1号是星期一

实现的功能:

  • 通过本条件来写一个输入相应的年份和月份就可以在控制台输出相应月份月历

基本的思路:

  1. 已知1900年的1月1日是周一,要输出这个月的月历首先最需要知道的就是本月1号是周几,这样我们才可以排列出来这个月的月历第一天的位置

      本月1号距离1900年1月1号多少天设为days,这个天数对7取余数就可以求出本月1号是周几
      0周一 | 1周二 | 2周三 |3 周四 | 4周五 | 5周六 | 6周日
      天数 = (输入的年份 - 1900)* 365 (如果是闰年在加一天)
      闰年的判断条件(可以被4整除但是不能被100整除的 或者 是可以被400整除的年份)
  2. 第二点就是要知道这个月有多少天

      本月的天数就是从1月份到12月份判断(中间要注意平年和閏年的2月份不一样,加一个条件判断)      
    
  3. 第三点就是每次要在周六的日期输出之后换到下一行(以周日为每周的第一天的情况)

      判断日期为周几的方法和判断1号的方法是一样的,为了方便可以直接在本月1号的时间上加上今天的日期减一就可以知道今天的时间
      距离1900年1月1号的时间差,对7取余就知道是周几了
    

下面是个人写的代码:

public class WanNianLi {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        // 欢迎界面
        System.out.println("*************************");
        System.out.println("******** 万年历   *********");
        System.out.println("*************************");

        System.out.print("请输入年份:");
        // 年份
        int year = input.nextInt();
        System.out.print("请输入月份:");
        // 月份
        int month = input.nextInt();

        boolean isRun = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;

        /**
         * 当前月份的月1日距离1900 年的1月1日多少日
         */
        int dates = 0;
        for (int i = 1900; i < year; i++) {
            dates += 365;
                      //判断是不是闰年,如果是闰年就在dates的基础上+1天
            if ((i % 4 == 0 && i % 100 != 00) || (i % 400 == 0)) {
                dates += 1;
            }
            // System.out.println(i + "年:" + dates);
        }

        // System.out.println(dates);
              // 1、3、5、7、8、10月份加31天,3、6、9、11月加30天,平年2月加28,闰年2月加29天
        for (int i = 1; i < month; i++) {
            switch (i) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
                dates += 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                dates += 30;
                break;
            case 2:
                if (isRun) {
                    dates += 29;
                } else {
                    dates += 28;
                }
                break;
            }
        }

        // System.out.println(dates);

        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");

        /**
         * 1号需要空几个制表符
         */
        int week = dates % 7;
        switch (week) {
        case 0:
            System.out.print("\t");// 周一
            break;
        case 1:
            System.out.print("\t\t");// 周二
            break;
        case 2:
            System.out.print("\t\t\t");// 周三
            break;
        case 3:
            System.out.print("\t\t\t\t");// 周四
            break;
        case 4:
            System.out.print("\t\t\t\t\t");// 周五
            break;
        case 5:
            System.out.print("\t\t\t\t\t\t");// 周六
            break;

        default:
            break;
        }

        /**
         * 选择输出的这个月的天数
         */
        int days = 31;
        switch (month) {
        case 4:
        case 6:
        case 9:
        case 11:
            days = 30;
            break;
        case 2:
            if (isRun) {
                days = 29;
            } else {
                days = 28;
            }
            break;
        }

        /**
         * 循环输出本月的每一天,判断如果是周六就换行
         */
        for (int i = 1; i <= days; i++) {
            System.out.print(i + "\t");
            if ((dates + i - 1) % 7 == 5) {
                System.out.println();
            }
        }

    }

}

结果演示:

bandicam_2019_08_03_14_11_30_911
bandicam_2019_08_03_14_11_20_318

相关文章
|
3月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
1月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
225 18
|
1月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
93 4
|
2月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
170 15
|
7月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
276 5
|
3月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
382 0
|
4月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
255 14
|
3月前
|
JSON Java API
【干货满满】分享拼多多API接口到手价,用Java语言实现
本方案基于 Java 实现调用拼多多开放平台商品详情 API,通过联盟接口获取商品到手价(含拼团折扣与优惠券),包含签名生成、HTTP 请求及响应解析逻辑,适用于电商比价、导购系统集成。
|
3月前
|
JSON Java API
【干货满满】分享淘宝API接口到手价,用Java语言实现
本文介绍了如何使用 Java 调用淘宝开放平台 API 获取商品到手价,涵盖依赖配置、签名生成、HTTP 请求与响应解析等核心实现步骤。
|
4月前
|
JavaScript Java Go
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
328 0