使用 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

相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
90 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
21天前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
4月前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
29天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
48 4
|
5月前
|
Oracle 安全 Java
Java语言简介及发展
Java语言简介及发展
|
2月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
56 3
|
2月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
85 4
|
2月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
68 2
|
2月前
|
Java 数据安全/隐私保护 C++
Java语言关键字
Java语言关键字
28 2
|
2月前
|
分布式计算 安全 Java
Java语言的特点?
Java语言的特点?