问题描述:
接收年月,输出当月日历,
( 已知1900年1月1日 星期一)
效果如下:
请选择年份:1998
请选择月份: 10
请选择年份:1998
请选择月份:10
星期日 星期一 星期二 星期三 星期四 星期五 星期六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
源码:
方法一、使用Calendar类
import java.util.Calendar;
import java.util.Scanner;
public class MyCalendar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请选择年份:");
int year = sc.nextInt();
System.out.print("请选择月份:");
int month = sc.nextInt();
PrintCanlendar(year,month);
}
//打印日历
public static void PrintCanlendar(int year,int month) {
System.out.print("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
Calendar calendar = Calendar.getInstance();
calendar.set(year,month-1,1); //!!!此处月份一定要减一
//Calendar.DAY_OF_WEEK默认以星期天为第一天
int weekday = calendar.get(Calendar.DAY_OF_WEEK); //得到该月第一天是星期几
calendar.set(year, month, 1); //此处month没有减一!!!
calendar.add(Calendar.DATE, -1);
//得到该月最后一天是多少号,即该月有多少天
int day = calendar.get(Calendar.DAY_OF_MONTH);
//按照格式打印日历
for(int i =0;i<weekday-1;i++)
System.out.print("\t");
for(int i = 1;i <= day ;i++) {
System.out.print(i);
if((i+weekday-1)%7==0)
System.out.println();
else
System.out.print("\t");
}
}
}
方法二:不使用Calendar类
import java.util.Scanner;
public class MyCalendar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请选择年份:");
int year = sc.nextInt();
System.out.print("请选择月份:");
int month = sc.nextInt();
PrintCanlendar(year,month);
}
//打印日历
public static void PrintCanlendar(int year,int month) {
System.out.print("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
int weekday = Caculate(year,month);//该月第一天是星期几
int day = DayOfMonth(year,month);//该月有多少天
for(int j =0;j<weekday;j++)
System.out.print("\t");
for(int i = 1;i <= day ;i++) {
System.out.print(i);
if((i+weekday)%7==0)
System.out.println();
else
System.out.print("\t");
}
}
//计算year年month月第一天是星期几
public static int Caculate(int year,int month) {
//保存此月第一天是星期几
int weekday=0;
//保存year年month月1日到1900年1月1日有多少天
int sum_days = 0;
//1900年1月1日到year年1月1日的天数
for(int i=1900;i<year;i++) {
if(isLeapYear(i))
sum_days += 366;
else
sum_days += 365;
}
//year年1月1日到year年month月1日的天数
for(int i =1;i<month;i++ )
sum_days += DayOfMonth(year,i);
//year年month月1日是星期几
weekday = (sum_days +1 )%7;
return weekday;
}
//判断是否是闰年
public static boolean isLeapYear(int year) {
if(year%4==0 && year %100!=0 || year%400==0)
return true;
else
return false;
}
//计算每一个月有多少天
public static int DayOfMonth(int year,int month) {
int day =0 ;
switch(month) {
case 1: case 3: case 5: case 7:case 8: case 10: case 12:
day = 31;break;
case 4: case 6: case 9: case 11:
day = 30;break;
case 2:
if(isLeapYear(year)) day = 29;
else day = 28;
break;
}
return day;
}
}