首页 > 编程语言 >JAVA基础:万年历 【习题笔记】

JAVA基础:万年历 【习题笔记】

时间:2024-10-28 19:45:12浏览次数:8  
标签:JAVA 万年历 int System month year 习题 Calendar out

  • 基础版
     public static void main(String[] args) {
            System.out.println("请输入年份:");
            Scanner input = new Scanner(System.in);
            int year = input.nextInt();
            System.out.println("请输入月份:");
            int month = input.nextInt();
    
            //计算这个月有多少天
            int days = 0;
            if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                days = 31;
            } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                days = 30;
            } else {
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    days = 29;
                } else {
                    days = 28;
                }
            }
            //2.算输入月份的1号是星期几
            //2.1先算 你输进来的年份year年 距离 1900年相差的整年天数差
            int sumYear = 0;
            for (int i = 1900; i < year; i++) {
                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                    sumYear += 366;
                } else {
                    sumYear += 365;
                }
            }
            //2.2再算year年的一月 距离month月的天数差
            int sumMonth = 0;
            for (int i = 1; i < month; i++) {
                if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
                    sumMonth += 31;
                } else if (i == 4 || i == 6 || i == 9 || i == 11) {
                    sumMonth += 30;
                } else {
                    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                        sumMonth += 29;
                    } else {
                        sumMonth += 28;
                    }
                }
            }
            //2.3计算year年month月1号是星期几?
            int week = (sumYear + sumMonth + 1) % 7;
            if (week == 0) {
                week = 7;
            }
            //3.打印日历
            System.out.println(year + "年" + month + "月");
            System.out.println("一\t二\t三\t四\t五\t六\t日");
            for (int i = 1; i < week; i++) {//挤出前面
                System.out.print("\t");//直接输出
            }
            for (int i = 1; i <= days; i++) {//日历内容
                System.out.print(i + "\t");//直接输出
    
                if ((sumMonth + sumYear + i) % 7 == 0) {//换行
                    System.out.println();//输出后换行
                }
            }
    
    
        }

    最基础的写法,代码量大,但是思路最为清晰,新手必学!!!

  • 进阶版
     public static void main4(String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.println("请输入年份");
            int year = input.nextInt();
            System.out.println("请输入月份");
            int month = input.nextInt();
            Calendar calendar = Calendar.getInstance();//当前时间
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month - 1);
            //这个月有多少天?
            int days = calendar.getActualMaximum(Calendar.DATE);
            //这个月的1号是星期几?
            calendar.set(Calendar.DATE, 1);
            int week = calendar.get(Calendar.DAY_OF_WEEK) == 1 ? 7 : calendar.get(Calendar.DAY_OF_WEEK) - 1;
            //calendar .get(Calendar.DAY_OF_WEEK) :获取1号是本周的第几天
            //打印日历
            System.out.println("一\t二\t三\t四\t五\t六\t日\t");
            for (int i = 1; i < week; i++) {
                System.out.print("\t");
            }
            for (int i = 1; i <= days; i++) {
                System.out.print(i + "\t");
                calendar.set(Calendar.DATE, i);
                if (calendar.get(Calendar.DAY_OF_WEEK) == 1) {
                    System.out.println();
                }
            }
    
    
        }

    采用日期时间类,使用Canlendar,代码更加简单,更加便捷。

标签:JAVA,万年历,int,System,month,year,习题,Calendar,out
From: https://blog.csdn.net/2301_81819439/article/details/143276200

相关文章

  • JAVA基础:面向对象 (习题笔记)
    面向对象【初】1.猫要求:使用面向对象的思想,编写自定义类描述猫通过构造函数实现对所有属性赋值吃饭的方法通过接收输入参数,描述喜欢吃的食物玩耍的方法实现根据心情的好坏,表现不同的玩耍状态,信息中包含名字,品种,颜色  的属性内容 编写测试方法,通过构造函数实例......
  • 【JavaWeb】ELK介绍
    1.ELK简介ELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana,它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。Elasticsearch是个开源分......
  • JavaSE——多线程2:线程池详解
    一、线程池介绍        线程池(ThreadPool)是一种基于多线程处理的服务器架构,它预先创建并维护一组线程,用于处理异步任务或并发请求。线程池的设计目的是减少创建和销毁线程的开销,提高系统的响应速度和吞吐量。(一)线程池的主要核心原理创建一个池子,池子中是空的。......
  • java+vue计算机毕设访客预约小程序【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着社会信息化程度的不断提升,企事业单位对访客管理的需求日益增强。传统的访客登记方式往往依赖纸质记录,不仅效率低下,还存在信息泄露和难以追溯的问......
  • java+vue计算机毕设二手物品交易系统的设计与实现【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,随着经济的飞速发展和人们生活水平的提高,消费观念逐渐从“物质至上”转向“绿色环保”和“可持续发展”。这一转变促使二手物品交易市场迅......
  • java+vue计算机毕设电影播放平台的设计与实现【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字媒体内容已成为人们日常生活中不可或缺的一部分。电影作为一种重要的文化娱乐形式,其观看方式也经历了从传统影院到在线......
  • 【最新Java必过毕设选题】基于微信小程序的智能商场(源码+万字LW)
    今天向大家分享一个最新完成的高质量毕业设计项目作品基于springboot+uniapp的XXX微信小程序项目评分(最低0分,满分5分)难度系数:3分工作量:5分创新点:3分界面美化:5分使用技术小程序框架:uniapp小程序开发软件:HBuilderX小程序运行软件:微信开发者微信小程序配置环境......
  • 字符串 (反转字符串、字符串变形) [Java]
    字符串1、反转字符串题目链接:力扣描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。示例输入:s=[“h”,“e”,“l”,“l”,“o”]......
  • 基于Java实现的就业信息管理系统设计与实现(源码+数据库+文档+部署等)
    文章目录1.前言2.详细视频演示3.程序运行示例图4.文档参考5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue5.3程序操作流程6.选题推荐7.原创毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java的校园办公室报修管理系统设计与实现(源码+数据库+LW+部署等)
    文章目录1.前言2.详细视频演示3.程序运行示例图4.文档参考5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue5.3程序操作流程6.选题推荐7.原创毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......