一. 题目
输出2008年的日历,统计2008年日期个位数和星期恰好相同的天数;
二,结果展示
三,代码
1.常规方法
以下一个类一个文件
package calendar;
public class J_Year{
int year;
int allday;
int [] d= {0,31,0,31,30,31,30,31,31,30,31,30,31};
public J_Year() {}
public J_Year(int year) {
this.year=year;
if(Isleapyear()) {
d[2]=29;
allday=366;
}
else {
d[2]=28;
allday=365;
}
}
public boolean Isleapyear() {
return (year%4==0&&year%100!=0||year%400==0);
}
public int getday(int month,int day) {
int y=year%100;
int D=day;
for(int i=1;i<month;i++)
D+=d[i];
return ((y-1)+((y-1)/4)-((y-1)/100)+((y-1)/400)+D)%7;//公式
}
}
///
///主类
///
package calendar;
public class J_Calendar {
public static void main(String args[]) {
J_Year a = new J_Year(2008);
int w;
int count=0;
for (int month = 1; month <= 12; month++) {
w = a.getday(month, 1);
System.out.print("\n\n 第"+month+"月\n\n");
System.out.println(" 日 一 二 三 四 五 六");
for (int j = 0; j < w; j++)
System.out.print(" ");
for (int day = 1; day <= a.d[month]; day++) {
System.out.printf("%4d", day);
w++;
if (w % 7 == 0)
System.out.println();
if((day%10)==a.getday(month, day)||(day%10)==7&&a.getday(month, day)==0)
count++;
}
}
System.out.println("\n\n日期个位数和星期数相同的天数有"+count+"天");
}
}
2.调用Calendar方法
package 测试;
import java.util.Calendar;
public class LittleCode_3 {
public static void printCalender(int Year,int Month) {
int year = Year;
int month = Month;
//input
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int startDay = calendar.get(Calendar.DAY_OF_WEEK); //求本周第一天是星期几
int count = startDay - 1; //第一周的初始计数
int maxDay = maxDayInMonth(year, month);
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
fillSpace(startDay);
for (int i = 1; i <= maxDay; i++) {
System.out.printf("%3d%s", i, " "); //使用printf函数进行格式对齐
count++;
if (count >= 7) { //每输出7天换一次行
count = 0;
System.out.print('\n');
}
}
}
public static void fillSpace(int startDay) {
for (int i = 1; i < startDay; i++) {
System.out.printf("%4s", " ");
}
}
public static int maxDayInMonth(int year, int month) {
int max = 30;
if (month == 1 | month == 3 | month == 5 | month == 7 | month == 8 | month == 10 | month == 12) max = 31;
else if (month == 2) max = 28;
else if (month == 2 & (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) max = 29;
return max;
}
public static void main(String[] args) {
for(int i=1;i<=12;i++) {
System.out.print("\n第"+i+"月\n");
printCalender(2019,i);
}
System.out.println();
}
}