发布时间:2026-09-28 18:39:35 浏览次数:1
下面是“Java实现万年历效果”的完整攻略。
在实现万年历之前,需要先了解一些基本知识:
接下来就可以开始实现万年历了。
使用 Scanner 类从控制台读取用户输入的年份和月份。
Scanner scanner = new Scanner(System.in);System.out.print("请输入年份:");int year = scanner.nextInt();System.out.print("请输入月份:");int month = scanner.nextInt();使用 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) 方法可以获取该月有多少天。
如果觉得上述代码太过臃肿,可以考虑将其封装成方法,以达到模块化编程的效果。例如:
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++; }}这样,就可以直接调用方法,输出某年某月的月历了。
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);}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(); }}在实际应用中,我们可以根据不同的需求,来对这份代码进行灵活的修改和扩展。