Java实现万年历效果

下面是“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();
    }
}

总结

以上就是实现万年历的完整攻略。其核心就是使用 Java 的日期类和输入输出流,以及模块化编程来简化代码。

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

营销型网站