共计 1294 个字符,预计需要花费 4 分钟才能阅读完成。
以下是一个简单的 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("%2d ", 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()
方法获取指定年份和月份的第一天是星期几。最后,使用循环打印出万年历的日历部分。
丸趣 TV 网 – 提供最优质的资源集合!
正文完