public static void main(String[] args) {
System.out.println("请输入年份:");
Scanner input = new Scanner(System.in);
int year = input.nextInt();
System.out.println("请输入一个月份");
int month = input.nextInt();
//1.算你输入的月份有多少天?
int days = 0;
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
days = 31;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 31;
} else {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days = 31;
} else {
days = 31;
}
}
//2.算 输入月份的1号是星期几?
//2.1 先算 year年距离 1900年相差的整年天数差?
int sumYear=0;
for(int i=1900;i<year;i++){ //循环条件=开始条件+终止(循环)条件+修改条件
if(i%4==0 && i%100!=0 ||i%400==0){
sumYear+=366;// sumYear=sumYear+366;
}else{
sumYear+=365;
}
}
//2.2 再算 year年的1月 距离 month月 之间整月天数差?
int sumMonth=0;
for (int i=1;i<month;i++){
if(i==1|| i==3||i==5||i==7||i==8||i==10||i==12){
sumMonth += 31;
}else if(i==4 || i==6|| i==9|| i==11){
sumMonth += 30;
}else{
if(year%4==0 && year%100!=0 || year%400==0){
sumMonth += 29;
}else{
sumMonth += 28;
}
}
}
//2.3 计算 year年month月1号是星期几?
int week=(sumYear+sumMonth+1)%7;
if (week==0){
week=7;
}
System.out.println(year+"年"+month+"月1号星期"+week);
//3. 打印日历:
System.out.println(year+"年"+month+"月");
System.out.println("一\t二\t三\t四\t五\t六\t日");
for (int i=1;i<week;i++){
System.out.print("\t");
}
for (int i=1;i<=days;i++){
System.out.print(i+"\t");
if((sumYear+sumMonth+i)%7==0){
System.out.println();
}
}
}
}
常见bug
1.注意语句的开始和结束预防嵌套
2.打印日历时换行语句(选择不换行)