package demo;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println();
System.out.println("請輸入年:");
int year =sc.nextInt();
System.out.println("請輸入月:");
int month = sc.nextInt();
System.out.println("請輸入日:");
int days = sc.nextInt();
//獲得這個年月的1號是星期幾
int week = getWeek(year,month,days);
System.out.println("日 一 二 三 四 五 六");
System.out.println();
int count = 0;
//打印空格
for(int i = 0; i < week;i++){
count++;
System.out.print("\t");
}
//獲得這個年月的天數
int days1 = getDays(year, month);
for(int i =1; i <= days1;i++){
count++;
System.out.print(i+"\t");
if(count == 7){
System.out.println();
System.out.println();
count = 0;
}
}
System.out.println();
}
//星期
/**
week = (year-1+(year-1)/4-(year-1)/100+(year-1)/400+days)%7
*/
public static int getWeek(int year, int month, int days){
//先計算指定年月日的是這一年的第多少天
int totalDays = getTotalDays(year, month, days);
int week = (year-1+(year-1)/4-(year-1)/100+(year-1)/400+totalDays)%7;
return week;
}
//給定年月日 求出是第幾天
public static int getTotalDays(int year,int month,int days){
//定義一個天數的和 31+29+30
int totalDays = 0;
//從1月循環到當前月-1,天數求和 +當前天數
for(int i =1;i < month;i++){
int mdays = getDays(year,i);
totalDays = mdays + totalDays;
}
totalDays += days;
return totalDays;
}
//給定年月,求出天數
public static int getDays(int year,int month){
int mdays = 0;
switch(month){
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 :
mdays = 31;
break;
case 4 :
case 6 :
case 9 :
case 11 :
mdays = 30;
break;
case 2:
//可以被400整除或者能被4整除但是不能被100整除
if(year%400 == 0 || (year%4 == 0 && year%100 != 0)){
mdays = 29;
}else{
mdays = 28;
}
break;
}
return mdays;
}
}
