实现万年历效果
用户在控制台输入年份和月份,在控制台显示该月的日历。
实现代码:
import java.util.Scanner;
public class CalendarDemo {
//判断是否是闰年
public static boolean isRun(int year) {
//年份能被4整除,并且不能被100整除,或者能被400整除的年份,称为闰年。
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
}
return false;
}
//返回当月的总天数。
public static int getMonthDays(int year, int month) {
//默认每个月都是31天。
int days = 31;
//单独判断是否是小月即可。
switch (month) {
case 2:
//对于二月份要特殊对待。
if (isRun(year)) {
days = 29;
} else {
days = 28;
}
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
}
return days;
}
//假设1900-1-1是星期一,算出这个月的第一天距离1900-1-1过了多少天
public static int getTotalDays(int year, int month) {
int totalDays = 0;
//循环年份
for (int i = 1900; i < year; i++) {
if (isRun(i)) {
totalDays += 366;
} else {
totalDays += 365;
}
}
//循环月份
for (int i = 1; i < month; i++) {
totalDays += getMonthDays(year, i);
}
totalDays++;
return totalDays; //这个月的第一天距离1900-1-1过了多少天。
}
//打印日历
public static void printCalendar(int week, int days) {
//打印日历的表头
System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\t");
int iCount = 0; //计数器实现遇到7就换行。
//循环前面的空格
for (int i = 1; i < week; i++) {
iCount++;
System.out.print("\t\t");
}
//循环打印日历
for (int i = 1; i <= days; i++) {
System.out.print(i + "\t\t");
iCount++;
if (iCount % 7 == 0) {
System.out.println();
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int year; //输入的年份
int month; //输入的月份
int days = 0; //当月的总天数。
int totalDays = 0; //该月的第一天距离1900-1-1过了多少天。
int week; //表示这个月的第一天是星期几。
System.out.println("请输入年份:");
year = sc.nextInt();
System.out.println("请输入月份:");
month = sc.nextInt();
//计算这个月的总天数
days = getMonthDays(year, month);
//计算这个月的第一天,距离1900-1-1过了多少天
totalDays = getTotalDays(year, month);
//计算这个月的第一天是星期几
week = totalDays % 7;
if (week == 0){
week = 7;
}
//打印日历
printCalendar(week, days);
}
}
运行效果如下:
