持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
今天作作业遇到了一个题,是使用Calendar类打印本月的日历。可以提升一下小伙伴们对Calendar类的熟练程度。
效果
首先给大家看一做完后的效果。
代码
import java.util.Calendar;
import java.util.Scanner;
public class Calendartext {
public static void main(String[] args) {
Calendar1 calendar1 = new Calendar1();
calendar1.calendar();
}
}
class Calendar1{
int year;
int month;
int day = 1;
int dayMax ;
int week ;
public void calendar() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要查寻的年份");
year =scanner.nextInt();
System.out.println("请输入要查询的月份");
month =scanner.nextInt();
System.out.println(year + "年" + month + "月");
System.out.println("==========================");
System.out.print("日\t一\t二\t三\t四\t五\t六\n");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month-1);
calendar.set(Calendar.DATE,1);
calendar.add(Calendar.MONTH,1);
calendar.add(Calendar.DATE,-1);
dayMax = calendar.get(Calendar.DATE);
calendar.add(Calendar.DATE,-dayMax);
calendar.add(Calendar.DATE,1);
week = calendar.get(Calendar.DAY_OF_WEEK)-1;
if (day == 1 && week < 7){
for (int i = 0; i < week; i++) {
System.out.print("\t");
}
for (int i = 0; i < 7-week; i++) {
System.out.print(day+"\t");
++day;
}
System.out.println("");
}
for (int j = 1; j <= 5; j++) {
for (int i = 0; i < 7; i++) {
if (day == dayMax){
System.out.println(day+"\t");
System.out.println("==========================");
return;
}
if (day < dayMax){
System.out.print(day+"\t");
++day;}
}System.out.println("");
}
}
}
代码解读
1.我们创建一个Calendar1这个类。里面添加属性day(记录遍历的天数),dayMax (记录当月一共有几天),week(记录当月第一天为星期几)。
2.我们再定义一个方法calendar()在这个方法里实现日历的打印。
3.我们要通过getInstance()来获取实例Calendar对象。
4.设置日期为1,月份再加1个月,再减1。就可以得到当月的最大天数为多少了,再赋值给dayMax。
5.我们再用获得的最大天数减上最大天数+1就可以的到当月的第一天。再通过Calendar的get方法获取到对应的星期数,并赋值给week。
6.需要知道的值我们都已经知道了,接下我们就需要写流程了。我们会发现日历的第一行可能会有空的天数。所以只需要调节第一行。这就需要我们用条件语和循环语句搭配来控制。因为第一行最少7天而且1号也在第一行。所有day == 1 && week < 7。这时你会想,为什么这里是小于7而不是等于7?那是因为如果等于7就是从第一开始打印。就不要考虑空格的问题了。已知week打印week-1个空格(i < week)。第一行剩下不是空格的打印天数(i < 7-week)。
7.System.out.println("");是用来换行的
8.为了只打印到当月最大天数,也要用循环加判断。日历最多打印5行,所以最外层循环5次。内层循环7个换一次行。天数小于本月最大天数时,打印天数。等于本月最大天数,打印天数,退出循环。
9.Scanner类来接收用户输入,在通过calendar.set()赋值给Calendar的相应字段。