课程中遇到让我们用非循环的方法将日历打印在控制台,由此运用LocalDate的实例。
int days;
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();
System.out.println("请输入月份:");
int month = sc.nextInt();
LocalDate localDate = LocalDate.of(year, month, 1);
// 从一年,一个月和一天获得一个 LocalDate的实例。
days = localDate.getMonth().maxLength();
//获取当前月数的最大天数
int week = localDate.getDayOfWeek().getValue();
//获取当前月1号的星期
if(year % 4==0&&year%100!=0||year%400==0) {
if(month==2) {
days = 29;
}
}else {
if(month==2) {
days=28;
}
}//2月比较特殊
接下来就来不用循环的方法来打印出Week的格式
System.out.println("日\t一\t二\t三\t四\t五\t六");
int i = 0;
if(i<week) {
System.out.print("\t");
i++;
}
if(i<week) {
System.out.print("\t");
i++;
}
if(i<week) {
System.out.print("\t");
i++;
}
if(i<week) {
System.out.print("\t");
i++;
}
if(i<week) {
System.out.print("\t");
i++;
}
if(i<week) {
System.out.print("\t");
i++;
}
if(i<week) {
System.out.print("\t");
i++;
}
这里考虑倒当前week为当月1号的星期,而日历表中当前月1日星期的value正好为前面空白星期总个数
int day = 1;
if((day + week)%7==0 && day <= days) {
System.out.print(day+"\t");
System.out.println("");
day++;
}else if(day<=days){
System.out.print(day+"\t");
day++;
}if((day + week)%7==0 && day <= days) {
System.out.print(day+"\t");
System.out.println("");
day++;
}else if(day<=days){
System.out.print(day+"\t");
day++;
}if((day + week)%7==0 && day <= days) {
System.out.print(day+"\t");
System.out.println("");
day++;
}else if(day<=days){
System.out.print(day+"\t");
day++;
}.........//直至大于或等于31次
这里计算出了天数,条件中判断了当前一日应空的距离 和当前月份的总天数days不能小于这里的day
输出结果如上。