第一步:做一个月,比如2020年1月第一天是星期三。
import java.util.Scanner;
public class TestRiLi {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入年:");
int year = input.nextInt();
System.out.println("请输入月:");
int month = input.nextInt();
System.out.println("请输入这个月的第一天是星期几:");
int start = input.nextInt();
//解决第一个月开始天数为7的问题
if(start == 7){
start = 0;
}
//输出日历头
System.out.println("日\t一\t二\t三\t四\t五\t六");
//输出没有日期的部分
for (int i = 1; i <= start; i++) {
System.out.print("\t");
}
//这里的31用上次做的求某年某个月的天数来做
//从这个月第一天开始输出,要求每七个换一行
for (int i = 1; i <= 31; i++) {
System.out.print(i + "\t");
if((i+start)%7 == 0){
System.out.println();
}
}
}
}
//week_day = (allDay + 1) % 7;// 当月第一天星期几
第二步:把月的天数改成活的。
import java.util.Scanner;
public class TestRiLi {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入年:");
int year = input.nextInt();
System.out.println("请输入月:");
int month = input.nextInt();
System.out.println("请输入这个月的第一天是星期几:");
int start = input.nextInt();
//解决第一个月开始天数为7的问题
if(start == 7){
start = 0;
}
//输出日历头
System.out.println("日\t一\t二\t三\t四\t五\t六");
//输出没有日期的部分
for (int i = 1; i <= start; i++) {
System.out.print("\t");
}
//这里的31用上次做的求某年某个月的天数来做
int days=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
days=31;
//如果是小月就是30天
}else if(month==4||month==6||month==9||month==11){
days=30;
//如果是2月,则判断当年是否是闰年
}else if(month==2){
if(year%4==0&&year%100!=0||year%400==0){
days=29;
}else{
days=28;
}
}
//从这个月第一天开始输出,要求每七个换一行
for (int i = 1; i <= days; i++) {
System.out.print(i + "\t");
if((i+start)%7 == 0){
System.out.println();
}
}
}
}
//week_day = (allDay + 1) % 7;// 当月第一天星期几
第三步:输入一整年,那就要知道这一年的一月的第一天是星期几,然后推算出每个月的第一天是星期几。
算法是:weekDay = (allDays + 1) % 7;//当月第一天星期几
那么所有的天数要计算出来,就是月天数累加,可以算出。
第四步:输入任何一年,任何一月,从1900年1月1日是星期一推算。然后推算出后面任何一年一月的第一天是星期几。
算法是:weekDay = (allDays + 1) % 7;//当月第一天星期几
那么所有的天数要计算出来,就是年天数累加,月天数累加,可以算出。