使用Calendar类打印本月的日历

288 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

今天作作业遇到了一个题,是使用Calendar类打印本月的日历。可以提升一下小伙伴们对Calendar类的熟练程度。

效果

首先给大家看一做完后的效果。
image.png

代码

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的相应字段。