import java.util.Scanner;
public class Demo_rili {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("这是一个输入年份及月份显示日历的程序");
System.out.println("请输入年份");
int year = sc.nextInt();
System.out.println("请输入月份");
int month = sc.nextInt();
//测试语句
System.out.println(" "+ year + "年 " + month + "月"); //标题
System.out.println("---------------------------"); //分割线
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
printbody(month,year);
}
public static void printbody(int month,int year){
int startday = (yearDays(1800,year)+ 3 + monthDays(month,year))%7; //找出星期几
int monthday = getMonthDay(month,year); //找出当月有几天
for (int i = 0;i < startday ;i++) {
System.out.print(" ");
}
for (int j =1 ;j <= monthday ;j++ ) {
System.out.printf("%4d",j);
if ((startday+j)%7 == 0) {
System.out.println();
}
}
System.out.println();
}
//计算指定某年,某月1日到同年1月1日的天数
public static int monthDays(int month,int year){
int day =0;
for (int i = 1;i < month;i++) {
day = day + getMonthDay(i,year);
}
return day;
}
//计算某年是不是闰年
public static int runNian(int year){
int day = 0;
if((year % 4 == 0 & year % 100 != 0)|| year % 400 == 0){
day = 1;
}
return day;
}
//计算两个年份之间有几个闰年
public static int runNianSu(int startyear,int overyear){
int su = 0;
for (int i = startyear; i < overyear; i++) {
if (runNian(i) == 1) {
su++;
}
}
return su;
}
//计算某年到某年之间有多少天
public static int yearDays(int startyear,int overyear){
int day = (overyear - startyear)*365+runNianSu(startyear,overyear);
return day;
}
//计算某个月有多少天
public static int getMonthDay(int month,int year){
int i = month;
if (i== 1|i==3|i==5|i==7|i==8|i==10|i==12) {
return 31;
}else if (i == 2) {
if (runNian(year) == 1){
return 29;
}
return 28;
}
return 30;
}
public class Demo_rili {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("这是一个输入年份及月份显示日历的程序");
System.out.println("请输入年份");
int year = sc.nextInt();
System.out.println("请输入月份");
int month = sc.nextInt();
//测试语句
System.out.println(" "+ year + "年 " + month + "月"); //标题
System.out.println("---------------------------"); //分割线
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
printbody(month,year);
}
public static void printbody(int month,int year){
int startday = (yearDays(1800,year)+ 3 + monthDays(month,year))%7; //找出星期几
int monthday = getMonthDay(month,year); //找出当月有几天
for (int i = 0;i < startday ;i++) {
System.out.print(" ");
}
for (int j =1 ;j <= monthday ;j++ ) {
System.out.printf("%4d",j);
if ((startday+j)%7 == 0) {
System.out.println();
}
}
System.out.println();
}
//计算指定某年,某月1日到同年1月1日的天数
public static int monthDays(int month,int year){
int day =0;
for (int i = 1;i < month;i++) {
day = day + getMonthDay(i,year);
}
return day;
}
//计算某年是不是闰年
public static int runNian(int year){
int day = 0;
if((year % 4 == 0 & year % 100 != 0)|| year % 400 == 0){
day = 1;
}
return day;
}
//计算两个年份之间有几个闰年
public static int runNianSu(int startyear,int overyear){
int su = 0;
for (int i = startyear; i < overyear; i++) {
if (runNian(i) == 1) {
su++;
}
}
return su;
}
//计算某年到某年之间有多少天
public static int yearDays(int startyear,int overyear){
int day = (overyear - startyear)*365+runNianSu(startyear,overyear);
return day;
}
//计算某个月有多少天
public static int getMonthDay(int month,int year){
int i = month;
if (i== 1|i==3|i==5|i==7|i==8|i==10|i==12) {
return 31;
}else if (i == 2) {
if (runNian(year) == 1){
return 29;
}
return 28;
}
return 30;
}
}
这是当时的分析,很杂,但是把问题分解的思路是对的.