# 我的解法比较偷懒,利用java自带的util包
# GregorianCalendar日历类
对于输出年月日历这样的题,我这样的小白一看就头蒙,无从下手。
如果从题目中的日期推向结果,那是大佬的作风,也是出题人的初心。
**如果不想去绞尽脑汁的编写算法,但是又想把这道题完成,就看看下面简单易懂的解法。**
分析一下题目,输出任意一个日历,其实关键难点是一个月的第一天是星期几:
##### get(Calendar.DAY_OF_WEEK);返回的是一个月的第一天
,有了这个点,其他的都不在是问题。像什么闰年、一个月有几天这样的问题小学老师都教过了,很简单。如果这个也不想费力气,还有:
##### getActualMaximum(Calendar.DAY_OF_MONTH);返回一个月的天数
剩下的工作就是一个for循环排列一下天数。
具体日历类怎么用,百度一下,有很多大佬讲解。附的代码可直接过。
import java.util.Scanner;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Main {
public static void main(String[] args) {
Scanner sn = new Scanner(System.in);
int year = sn.nextInt();
if (year < 2007)
return;
int month = sn.nextInt();
System.out.println("---------------------");
System.out.println(" Su Mo Tu We Th Fr Sa");
System.out.println("---------------------");
int i;
GregorianCalendar cal = new GregorianCalendar(year, month - 1, 1);// 对年份,月份,以及第一天来创建对象
int totalDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 获取该月份的天数
int startDay = cal.get(Calendar.DAY_OF_WEEK) - 1;// 获取该月的第一天是星期几
for (i = 0; i < startDay; i++)
System.out.print(" ");// 输出第一天前的空格
for (int day = 1; day <= totalDays; day++) {
if (day <= 9) { // 用于输出控制
System.out.print(" " + day);// 依次输出每一天
} else {
System.out.print(" " + day);
}
i++;
if (day < totalDays) {
if (i == 7) { // 每个星期输完换行
System.out.println();
i = 0;
}
} else {
System.out.println();
}
}
System.out.println("---------------------");
}
}
0.0分
2 人评分