从键盘输入年和月,打印出日历

package chapter01;
import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

	System.out.println("请输入年份:");

	//	从键盘接收int类型的年份
	int year = input.nextInt();

	System.out.println("请输入月份:");
	
	//	从键盘接收int类型的月份
	int month = input.nextInt();
	
	System.out.println("year:" + year + "\nmonth:" + month);
	
	int totalYear= 0, totalMonth = 0, totalDay = 0;
	
	//	以19000101是礼拜一为基准进行下一步的运算
	for(int i = 1900; i < year; i++) {
		//	四年一闰, 百年不闰, 四百年再闰
		if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
			totalYear += 366;
		}else {
			totalYear += 365;
		}
	}
	
	int days = 0;
	//	计算totalMonth
	for(int i = 1; i <= month; i++) {
		switch (i) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			days = 31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			days = 30;
			break;
		case 2:
			if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
				days = 29;
			}else {
				days = 28;
			}
			break;

		default:
			break;
		}
		
		//	用户输入的月份的天数不计入totalMonth中
		if(i < month) {
			totalMonth += days;
		}
	}
	
	//	计算totalDay
	totalDay = totalYear + totalMonth;

// System.out.println("totalDay : " + totalDay);

	//	totalDay根据与7的关系,可以计算出没月1号是礼拜几
	int firstDayOfMonth = totalDay % 7 + 1;
	
	//	当firstDayOfMonth为7的时候,让该值为0
	firstDayOfMonth = firstDayOfMonth == 7 ? 0:firstDayOfMonth;
	
	System.out.println(firstDayOfMonth);
	
	System.out.println("日\t一\t二\t三\t四\t五\t六\t");
	
	//	打印该月1号之前的所有的空格数
	for(int i = 0; i < firstDayOfMonth; i++) {
		System.out.print("\t");
	}
	
	//	循环打印该月份的所有天数
	for(int i = 1; i <= days; i++) {
		System.out.print(i + "\t");
		
		//	每遇到礼拜六换行
		if((i + totalDay) % 7 == 6) {
			System.out.println();
		}
	}
	
}

}

猜你喜欢

转载自blog.csdn.net/qq_41241541/article/details/89225748