//打印指定月份的日历信息
import java.util.*;
public class PrintfCalender {
public static void main(String[] args) {
/*本来想用二维数组做,后经发现实现不了
* String [][] calender=new String[6][7]; String[]
* firstline={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"}; calender[0]=firstline;
* Scanner inScanner=new Scanner(System.in); //
* System.out.println(Arrays.toString(calender));这种二维打印出来的都是引用
* System.out.println(Arrays.deepToString(calender));
*/
Scanner inScanner=new Scanner(System.in);
System.out.println("输入年:");
int a=inScanner.nextInt();
System.out.println("输入月:");
int b=inScanner.nextInt();
int PING[]= {31,28,31,30,31,30,31,31,30,31,30,31};
int RUN[]={31,29,31,30,31,30,31,31,30,31,30,31};
//sumall为总天数对7取余的值 sum为这个月前的这一年天数 RUNDAY为闰年个数
int RUNDAY=0,sum=0,sumall=0;
for(int i=1900;i<a;i++) {
if ((i%4==0&&i%100!=0)||(i%400==0))
RUNDAY++;
}
if (b>=2) {
int only=1;
//闰年时且月份大于1月时
if ((a%4==0&&a%100!=0)||(a%400==0)) {
for (int i = 0; i<b-1; i++) {
sum+=RUN[i];
}
sumall=(366*RUNDAY+365*(a-1900-RUNDAY)+sum)%7;
System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期天");
for (int i = 0; i <sumall; i++) {
System.out.print(" ");
}
for (int i =sumall; i<7; i++) {
System.out.print(String.format("%4d",only++));
System.out.print(" ");
}
System.out.println();
while(only<=RUN[b-1]) {
for (int i = 0; i<5; i++) {
for (int j =0; j<7&&only<=RUN[b-1]; j++) {
System.out.print(String.format("%4d",only++));
System.out.print(" ");
}
System.out.println();
}
}
}
//平年时且月份大于1月时
else {
System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期天");
for (int i = 0; i<b-1; i++) {
sum+=PING[i];
}
sumall=(366*RUNDAY+365*(a-1900-RUNDAY)+sum)%7;
for (int i = 0; i <sumall; i++) {
System.out.print(" ");
}
for (int i =sumall; i<7; i++) {
System.out.print(String.format("%4d",only++));
System.out.print(" ");
}
System.out.println();
while(only<=PING[b-1]) {
for (int i = 0; i<5; i++) {
for (int j =0; j<7&&only<=PING[b-1]; j++) {
System.out.print(String.format("%4d",only++));
System.out.print(" ");
}
System.out.println();
}
}
}
}
//任意年份1月的日历
else {
System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期天");
int only=1;
sumall=(366*RUNDAY+365*(a-1900-RUNDAY))%7;
for (int i = 0; i <sumall; i++) {
System.out.print(" ");
}
for (int i =sumall; i<7; i++) {
System.out.print(String.format("%4d",only++));
System.out.print(" ");
}
System.out.println();
while(only<=RUN[b-1]) {
for (int i = 0; i<5; i++) {
for (int j =0; j<7&&only<=31; j++) {
System.out.print(String.format("%4d",only++));
System.out.print(" ");
}
System.out.println();
}
}
}
}
}
输入2000年5月
输入2022年3月