第六章第三十四题(打印日历)(Print calendar)

it2026-09-23  14

第六章第三十四题(打印日历)(Print calendar)

**6.34(打印日历)编程练习题3.21使用Zeller一致性原理来计算某天是星期几。使用Zeller的算法简化程序清单6-12以获得每月开始的第一天是星期几。 **6.34(Print calendar) Programming Exercise 3.21 uses Zeller’s congruence to calculate the day of the week. Simplify Listing 6.12, PrintCalendar.java, using Zeller’s algorithm to get the start day of the month.参考代码: package chapter06; import java.util.Scanner; public class Code_34 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter full year (e.g., 2012): "); int year = input.nextInt(); System.out.print("Enter month as a number between 1 and 12: "); int month = input.nextInt(); printMonth(year, month); } public static void printMonth(int year, int month) { printMonthTitle(year, month); printMonthBody(year, month); } public static void printMonthTitle(int year, int month) { System.out.println(" " + getMonthName(month) + " " + year); System.out.println("-----------------------------"); System.out.println(" Sun Mon Tue Wed Thu Fri Sat"); } public static String getMonthName(int month) { String monthName = ""; switch (month) { case 1: monthName = "January"; break; case 2: monthName = "February"; break; case 3: monthName = "March"; break; case 4: monthName = "April"; break; case 5: monthName = "May"; break; case 6: monthName = "June"; break; case 7: monthName = "July"; break; case 8: monthName = "August"; break; case 9: monthName = "September"; break; case 10: monthName = "October"; break; case 11: monthName = "November"; break; case 12: monthName = "December"; } return monthName; } public static void printMonthBody(int year, int month) { int startDay = getStartDay(year, month); int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month); int i = 0; for (i = 0; i < startDay; i++) System.out.print(" "); for (i = 1; i <= numberOfDaysInMonth; i++) { System.out.printf("%4d", i); if ((i + startDay) % 7 == 0) System.out.println(); } System.out.println(); } public static int getStartDay(int year, int month) { int day = 1, h, q, m, j, k,statement; q = day; if(month == 1 || month == 2) { month += 12; year -= 1; } m = month; j = year / 100; k = year % 100; h = (q + (26 * (m + 1) / 10) + k + k / 4 + j / 4 + 5 * j) % 7; switch(h) { case 0: statement = 6; break; case 1: statement = 0; break; case 2: statement = 1; break; case 3: statement = 2; break; case 4: statement = 3; break; case 5: statement = 4; break; case 6: statement = 5; break; default: statement = -1; } return statement; } public static int getNumberOfDaysInMonth(int year, int month) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) return 31; if (month == 4 || month == 6 || month == 9 || month == 11) return 30; if (month == 2) return isLeapYear(year) ? 29 : 28; return 0; } public static boolean isLeapYear(int year) { return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0); } } 结果显示: Enter full year (e.g., 2012): 2012 Enter month as a number between 1 and 12: 2 February 2012 ----------------------------- Sun Mon Tue Wed Thu Fri Sat 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 Process finished with exit code 0
最新回复(0)