首先让我们看一下万年历思路:
1、输入日期
2、计算输入的月份是多少天
3、打印月份的天数
4、计算出输入的月份的第一天是周几
4.1、求出1900年1月1日到输入的日期总天数
4.2、总天数%7 求出周几
4.3、周几-1 求出空格数
5、打印空格
6、修改换行条件:(空格数+打印的日期)%7
代码如下↓↓↓↓↓↓↓↓↓↓↓↓↓↓
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年:");
int n = sc.nextInt();
System.out.println("请输入月:");
int y = sc.nextInt();
//判断输入的月 有多少天
//31天:1 3 5 7 8 10 12
int ts = 0;//存月份的天数
if(y==1||y==3||y==5||y==7||y==8||y==10||y==12) {
ts = 31;
}else if(y==4||y==6||y==9||y==11) {
ts = 30;
}else if(y==2) {
ts = 28;
if(n%4==0 &&n%100!=0 ||n%400==0) {
ts = 29;
}
}
//1900年1月1日 是周一
//求出空格数
//求整年
int sumDay = 0;
for(int i=1900;i<n;i++) {
sumDay+=365;
if(i%4==0&&i%100!=0 || i%400==0) {
sumDay+=1;
}
}
//求整月 y=10
for(int i=1;i<y;i++) {
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) {
sumDay+=31;
}else if(i==4 ||i==6||i==9||i==11) {
sumDay+=30;
}else if(i==2) {
sumDay+=28;
if(n%4==0&&n%100!=0 || n%400==0) {
sumDay+=1;
}
}
}
//加上1日
sumDay+=1;
//求出周几
int w = sumDay%7;
//如果整除 说明是周7
if(w==0) {
w = 7;
}
//计算空格数 周几-1
int kg = w-1;
System.out.println("空格数:"+kg);
System.out.println("一\t二\t三\t四\t五\t六\t日");
for(int i=1;i<=kg;i++) {
System.out.print("\t");
}
//打印月中的每一天
for(int i=1;i<=ts;i++) {
System.out.print(i+"\t");
if((i+kg)%7==0) {//打印了空格 (空格+数字) %7
System.out.println();
}
}
}