Java实现万年历效果

发布时间:2026-09-28 18:39:35 浏览次数:1

下面是“Java实现万年历效果”的完整攻略。

准备工作

在实现万年历之前,需要先了解一些基本知识:

  • Java 的日期类 Date、Calendar 和 LocalDate
  • Java 的输入输出流,包括 Scanner 和 System.out
  • Java 的字符串拼接和格式化输出
  • 模块化编程及测试方法

实现步骤

接下来就可以开始实现万年历了。

步骤1:获取用户输入的年份和月份

使用 Scanner 类从控制台读取用户输入的年份和月份。

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

步骤2:计算并输出该月的月历

使用 Calendar 类获取该月的第一天,然后根据每周七天的规律,输出该月的所有日期。注意,每周日要换行。

// 获取该月的第一天Calendar calendar = Calendar.getInstance();calendar.set(year, month - 1, 1);int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);// 输出月历System.out.printf("%d年%d月\n", year, month);System.out.println("日 一 二 三 四 五 六");for (int i = 1; i < firstDayOfWeek; i++) {    System.out.print("   ");}int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);for (int i = 1; i <= maxDay; i++) {    System.out.printf("%2d ", i);    if (firstDayOfWeek % 7 == 0) {        System.out.println();    }    firstDayOfWeek++;}

其中,getActualMaximum(Calendar.DAY_OF_MONTH) 方法可以获取该月有多少天。

步骤3:模块化编程(可选)

如果觉得上述代码太过臃肿,可以考虑将其封装成方法,以达到模块化编程的效果。例如:

public static void printMonth(int year, int month) {    Calendar calendar = Calendar.getInstance();    calendar.set(year, month - 1, 1);    int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);    System.out.printf("%d年%d月\n", year, month);    System.out.println("日 一 二 三 四 五 六");    for (int i = 1; i < firstDayOfWeek; i++) {        System.out.print("   ");    }    int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);    for (int i = 1; i <= maxDay; i++) {        System.out.printf("%2d ", i);        if (firstDayOfWeek % 7 == 0) {            System.out.println();        }        firstDayOfWeek++;    }}

这样,就可以直接调用方法,输出某年某月的月历了。

示例1:输出当前月份的月历

public static void main(String[] args) {    Calendar calendar = Calendar.getInstance();    int year = calendar.get(Calendar.YEAR);    int month = calendar.get(Calendar.MONTH) + 1;    printMonth(year, month);}

示例2:输出某年的全年月历

public static void main(String[] args) {    Scanner scanner = new Scanner(System.in);    System.out.print("请输入年份:");    int year = scanner.nextInt();    for (int month = 1; month <= 12; month++) {        printMonth(year, month);        System.out.println();    }}

总结

在实际应用中,我们可以根据不同的需求,来对这份代码进行灵活的修改和扩展。

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477