Java 一维数组实现 2023 年中国日历打印,带上下月日期
以下是使用一维数组和 Calendar 包编写的打印中国 2023 年日历的 Java 代码。代码中使用了注释来解释每个步骤的功能。\n\njava\nimport java.util.Calendar;\n\npublic class Calendar2023 {\n public static void main(String[] args) {\n // 获取当前日期\n Calendar calendar = Calendar.getInstance();\n // 设置日期为 2023 年 1 月 1 日\n calendar.set(2023, Calendar.JANUARY, 1);\n\n // 获取输入的月份\n int month = getInputMonth();\n\n // 设置日期为输入的月份的第一天\n calendar.set(Calendar.MONTH, month - 1);\n calendar.set(Calendar.DAY_OF_MONTH, 1);\n\n // 获取输入月份的天数\n int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);\n\n // 获取输入月份的第一天是星期几\n int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);\n\n // 计算需要打印的日历行数\n int rows = (daysInMonth + firstDayOfWeek - 1 + 6) / 7;\n\n // 创建一维数组存储日历\n int[] calendarArray = new int[rows * 7];\n\n // 填充日历数组\n int day = 1;\n for (int i = firstDayOfWeek - 1; i < rows * 7; i++) {\n if (day <= daysInMonth) {\n calendarArray[i] = day;\n day++;\n } else {\n break;\n }\n }\n\n // 打印日历\n printCalendar(calendarArray, rows, firstDayOfWeek);\n }\n\n // 获取输入的月份\n private static int getInputMonth() {\n // TODO: 从用户输入获取月份\n // 这里为了简化示例,直接返回固定的月份 4\n return 4;\n }\n\n // 打印日历\n private static void printCalendar(int[] calendarArray, int rows, int firstDayOfWeek) {\n // 获取星期的名称\n String[] weekDays = {"日", "一", "二", "三", "四", "五", "六"};\n\n // 打印星期标题\n for (String weekDay : weekDays) {\n System.out.printf("%3s", weekDay);\n }\n System.out.println();\n\n // 打印日历内容\n for (int i = 0; i < rows; i++) {\n for (int j = i * 7; j < i * 7 + 7; j++) {\n if (calendarArray[j] == 0) {\n // 打印上个月的日期\n System.out.printf("%3d", getPreviousMonthDay(firstDayOfWeek, j));\n } else if (calendarArray[j] > 0) {\n // 打印当前月的日期\n System.out.printf("%3d", calendarArray[j]);\n } else {\n // 打印下个月的日期\n System.out.printf("%3d", getNextMonthDay(firstDayOfWeek, j));\n }\n }\n System.out.println();\n }\n }\n\n // 获取上个月的日期\n private static int getPreviousMonthDay(int firstDayOfWeek, int index) {\n // 计算上个月的第一天的日期\n int previousMonthDay = 1 - firstDayOfWeek + index;\n\n // 计算上个月的天数\n Calendar previousMonthCalendar = Calendar.getInstance();\n previousMonthCalendar.set(2023, Calendar.JANUARY - 1, 1);\n int previousMonthDays = previousMonthCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);\n\n // 计算上个月的日期\n return previousMonthDay + previousMonthDays;\n }\n\n // 获取下个月的日期\n private static int getNextMonthDay(int firstDayOfWeek, int index) {\n // 计算下个月的日期\n return index - (7 - firstDayOfWeek) + 1;\n }\n}\n\n\n请注意,上述代码中的 getInputMonth() 方法用于获取输入的月份,这里为了简化示例,直接返回固定的月份 4。在实际使用中,您可以根据需要从用户输入获取月份。\n\n此外,代码中使用了 getPreviousMonthDay() 和 getNextMonthDay() 方法来计算上个月和下个月的日期。这些方法根据当前月份的第一天的星期和当前日期所在的位置来确定日期。\n\n最后,使用 printCalendar() 方法打印日历。该方法首先打印星期标题,然后根据日历数组的内容打印日历的每一天。如果数组元素为 0,则表示上个月的日期;如果数组元素大于 0,则表示当前月的日期;如果数组元素为负数,则表示下个月的日期。
原文地址: https://www.cveoy.top/t/topic/pZ9r 著作权归作者所有。请勿转载和采集!