Java基础之打印万年历的简单实现(案例)

下面是“Java基础之打印万年历的简单实现(案例)”的完整攻略:

简介

本案例演示了如何使用Java打印万年历,通过计算出每个月的天数和星期几,并将其输出到控制台中。

实现步骤

第一步:输入年份

Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();

这里使用Scanner类获取用户输入的年份,保存到year变量中。

第二步:计算是否为闰年

计算公元年份 Y 是否为闰年的公式:

  • Y % 4 == 0 && Y % 100 != 0
  • Y % 400 == 0
boolean isLeapYear = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
    isLeapYear = true;
}

如果是闰年,isLeapYear 的值为 true,否则为 false

第三步:输入月份

System.out.print("请输入月份:");
int month = scanner.nextInt();

这里使用Scanner类再次获取用户输入的月份,保存到month变量中。

第四步:计算每个月的天数

根据闰年和平年来确定每个月的天数:

  • 1、3、5、7、8、10、12月为31天;
  • 4、6、9、11月为30天;
  • 2月平年为28天,闰年为29天。
int days = 0;
switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        days = 31;
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        days = 30;
        break;
    case 2:
        if (isLeapYear) {
            days = 29;
        } else {
            days = 28;
        }
        break;
    default:
        break;
}

这里使用switch语句根据用户输入的月份来计算出每个月的天数,保存到days变量中。

第五步:计算每个月的第一天是星期几

使用蔡勒公式,计算每个月的第一天是星期几:

  • W = (C / 4) - 2C + Y + (Y / 4) + (13 * (M + 1) / 5) + d - 1
  • W:星期几(0~6,0表示星期日,1表示星期一,以此类推);
  • C:世纪数(例如2000年属于20世纪,C=20,1900年属于19世纪,C=19);
  • Y:年份(后两位);
  • M:月份(3~14,3表示1月,4表示2月,以此类推);
  • d:日(1~31)。
int century = year / 100;
int y = year % 100;
int monthTemp = 0;
if (month <= 2) {
    monthTemp = month + 12;
    y--;
} else {
    monthTemp = month;
}
int week = (century / 4) - 2 * century + y + y / 4 + 13 * (monthTemp + 1) / 5 + 1;

week %= 7;
if (week < 0) {
    week += 7;
}

这里用到了取模运算,将计算得到的星期数转换为0~6之间的数,0表示星期日,1表示星期一,以此类推。

第六步:打印日历

接下来,我们就可以将日历打印出来啦,下面是代码:

System.out.printf("%d年%d月\n", year, month);
System.out.println("日 一 二 三 四 五 六");
for (int i = 0; i < week; i++) {
    System.out.print("   ");
}
for (int i = 1; i <= days; i++) {
    System.out.printf("%2d ", i);
    if ((i + week) % 7 == 0) {
        System.out.println();
    }
}

这里使用printf方法来格式化输出,最后通过循环输出每一个日期。注意,这里要根据每个月的第一天是星期几来决定每个月1号前要输出多少个空格。

示例

以下是一些示例,展示了程序的输出结果:

示例一

请输入年份:2019
请输入月份:5
2019年5月
日 一 二 三 四 五 六
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

示例二

请输入年份:2000
请输入月份:2
2000年2月
日 一 二 三 四 五 六
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29

以上就是本案例的完整攻略,希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础之打印万年历的简单实现(案例) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • JSP取得在WEB.XML中定义的参数

    首先,我们可以在web.xml文件中定义一些全局参数,在JSP页面中可以通过ServletContext对象访问这些参数。具体操作步骤如下: 在web.xml文件中定义参数 <context-param> <param-name>globalParam</param-name> <param-value>这是一…

    Java 2023年6月15日
    00
  • springboot实现注册加密与登录解密功能(demo)

    确认需求 在实现注册加密与登录解密功能之前,我们需要先确认需求。 我们需要一个使用SpringBoot实现的用户注册功能,并将用户的密码进行加密存储。同时,我们需要实现用户登录功能,并对用户输入的密码进行解密。 密码加密与解密 为了保证用户密码的安全性,我们需要将用户密码进行加密存储。常见的加密方式有MD5、SHA-1、SHA-256等。 下面是以MD5为例…

    Java 2023年5月20日
    00
  • 什么是垃圾回收?

    以下是关于垃圾回收的完整使用攻略: 什么是垃圾回收? 垃圾回收是指在程序运行过程中,自动回收不再使用的内存空间,从而避免内存泄漏和内存溢出。垃圾回收是一种自动化的内存管理方式,可以减少程序员的工作量,提高程序的可靠性和安全性。 垃圾回收的原理 垃圾回收的原理主要有以下几点: 1. 标记清除算法 标记清除算法是垃圾回收的一种常见算法,它的原理是在程序运行过程中…

    Java 2023年5月12日
    00
  • JavaWeb项目部署到服务器详细步骤详解

    以下是JavaWeb项目部署到服务器的详细步骤: 1. 准备工作 在进行JavaWeb项目部署之前,需要先进行一些准备工作。首先是服务器环境的准备。服务器需要安装Tomcat、JDK以及MySQL等相关软件,并且需要配置好环境变量等一些基本设置。 其次,需要将JavaWeb项目进行打包处理。一般来说,我们可以通过eclipse或者IntelliJ IDEA等…

    Java 2023年5月24日
    00
  • 基于Java数组实现循环队列的两种方法小结

    接下来详细讲解一下“基于Java数组实现循环队列的两种方法小结”的内容。 标题 基于Java数组实现循环队列的两种方法小结 简介 在队列的实现中,循环队列是一种比较常用的方式。本文主要介绍了基于Java数组实现循环队列的两种方法,包括普通循环队列和双端循环队列。 普通循环队列实现 普通循环队列的实现思路是利用数组来存储队列元素,通过两个指针front和rea…

    Java 2023年5月26日
    00
  • Java C++题解leetcode856括号的分数

    下面我将为你详细讲解“Java C++题解leetcode856括号的分数”的完整攻略。 题目描述 给定一个平衡括号字符串 S,按下述规则计算该字符串的分数: () 得 1 分。 AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。 (A) 得 2 * A 分,其中 A 是平衡括号字符串。 示例1: 输入: "()" 输出: 1…

    Java 2023年5月20日
    00
  • Java中BigDecimal类的简单用法

    Java中BigDecimal类的简单用法 什么是BigDecimal? BigDecimal是Java中的一个数学类,它主要用于处理高精度的浮点数运算,并避免了普通float和double数值的精度损失问题。在需要极高精度计算的场景中,BigDecimal可以起到至关重要的作用。 如何使用BigDecimal? 创建BigDecimal对象 我们可以使用B…

    Java 2023年5月26日
    00
  • Java 汇编JVM编写jasmin程序的操作方法

    Java汇编是一种利用Jasmin工具编写JVM汇编代码的技术。在Java虚拟机中,Jasmin程序就相当于Java程序源代码,可以通过JVM将其转化为可执行的二进制代码。以下是Java汇编JVM编写jasmin程序的完整实现攻略。 步骤一:安装Jasmin Jasmin是一个免费的开源工具,可以从其官方网站下载最新版本:http://jasmin.sour…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部