????????Java??????????:
import java.util.Scanner; public class Calendar { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("?????:"); int year = scanner.nextInt(); System.out.print("?????:"); int month = scanner.nextInt(); printCalendar(year, month); } public static void printCalendar(int year, int month) { int totalDays = getDaysOfMonth(year, month); int firstDayOfWeek = getFirstDayOfWeek(year, month); System.out.println("? ? ? ? ? ? ?"); // ???????????? for (int i = 0; i < firstDayOfWeek; i++) { System.out.print(" "); } // ???? for (int i = 1; i <= totalDays; i++) { System.out.printf("- ", i); // ?? if ((i + firstDayOfWeek) % 7 == 0) { System.out.println(); } } } public static int getDaysOfMonth(int year, int month) { int[] daysOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // ???? if (isLeapYear(year) && month == 2) { return 29; } return daysOfMonth[month - 1]; } public static int getFirstDayOfWeek(int year, int month) { // ?? Zeller??????? if (month < 3) { month += 12; year--; } int century = year / 100; year %= 100; int dayOfWeek = (year + year / 4 + century / 4 - 2 * century + 26 * (month + 1) / 10) % 7; // ??????????? return (dayOfWeek + 7) % 7; } public static boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } }
??Scanner?????????????,????printCalendar()
????????printCalendar()
??????getDaysOfMonth()
???????????,getFirstDayOfWeek()
??????????????????????,????????????????