一、万年历
需求:输入年和月,输出当月的日历
(1900年1月1日是星期一)
思路:
1、计算出输入的某年某月1日距离1900年1月1日的天数,模上7求余数,得到某年某月1日是星期几
2、总天数 = 1900年~输入年的总天数 + 1月~输入月的总天数 +1
3、用switch语句选择得到月份的天数,注意平闰年的二月天数不一样
4、当总天数模上7 = 0时,week =7
import java.util.Scanner;
public class Calendar{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
//计算离1900年1月1日的总天数
//计算1900年~输入年的总天数
int yearDaySum=0;
for(int i=1900;i<year;i++){
if((i%4==0 && i%100!=0)||(i%400==0)){
yearDaySum += 366;
}else{
yearDaySum +=365;
}
}
//计算 1月~输入月的总天数
int monthDaySum=0;
for(int i=1;i<month;i++){
switch(i){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
monthDaySum +=31;
break;
case 4:case 6:case 9:case 11:
monthDaySum += 30;
break;
case 2:
if((year%4==0 && year%100!=0)||(year%400==0)){
monthDaySum += 29;
}else{
monthDaySum +=28;
}
}
}
//总天数
int sum = monthDaySum+yearDaySum+1;
//计算星期几
int week = sum % 7;
if(week == 0){
week = 7;//特殊情况
}
//得出月份天数
int day=0;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
day = 31;
break;
case 4:case 6:case 9:case 11:
day = 30;
break;
case 2:
if((year%4==0 && year%100!=0)||(year%400==0)){
day = 29;
}else{
day = 28;
}
}
//打印
System.out.println("--------------"+year+"年"+month+"月--------------");
System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期天\t");
int num=0;//计算换行,每输出7次换一次行
for(int i=1;i<week;i++){
System.out.print("\t");
num++;
}
for(int i =1;i<=day;i++){
if(num==7){
System.out.println();//达到7次换行
num=0;
}
System.out.print(i+"\t");
num++;
}
}
}
代码启示:考虑循环次数时,代入具体的情况纪进行判断