各位大神好,这个程序太复杂了,怎么能够简化一下呀?
//用户从屏幕上输入一个年份和月份 ,打印出该月的日历
import java.util.Scanner;
public class PrintCalendar {
public static void main(String[] args) {
System.out.println("请您输入年份:");
int year=inputData();//定义个变量year,存储用户输入的年份
if(year<1900||year>9999){System.out.println("您输入的年份不对,请重新输入:");//提醒用户输入是否有误
year=inputData();}
System.out.println("请你输入月份:");
int month=inputData();//定义一个变量month,用来存储用户输入的月份
if(month<1||month>12){System.out.println("您输入的月份不对,请重新输入:");
month=inputData();}
int sumDay=(decideYear( year )+deicdeMonth(year ,month ))+1;//定义一个变量sumDay,用来 统计总天数
printYearMonth(year,month,sumDay );//使用方法,打印日历
}
//定义方法decideYear,用来统计year年以前的天数
public static int decideYear(int year ){
int sumYearDay=0;//定义变量,统计year年以前的天数
//判断是否是瑞年 如果是瑞年天数+366,否则天数+365;
for(int i=1900;i<year;i++){
if(i%4==0&&i%100!=0||i%400==0){sumYearDay+=366;}//判断是否是瑞年,瑞年366天
else { sumYearDay+=365;}//平年 365天
}
return sumYearDay;//返回总天数
}
//定义方法decideYear,用来统计year年以后到month月以前的天数
public static int deicdeMonth(int year,int month){
int sumMonthDay=0;//定义变量,用来统计year年以后到month月以前的天数
for(int i=1;i<month;i++){
if(i==2){//判断是否为2月
if(year%4==0&&year%100!=0||year%400==0){sumMonthDay+=29;}//判断是否为瑞年 如果当年为瑞年 则2月有29天
else{sumMonthDay+=28;}//如果不是瑞年 则2月只有28天
}
else if(i==4||i==6||i==9||i==11){sumMonthDay+=30;}//判断是月份是否为4/6/9/11月,这几个月为30天
else{sumMonthDay+=31;}//剩下的1/3/5、7/8/10/12均为31天
}
return sumMonthDay;//返回天数
}
//打印日历
public static void printYearMonth(int year,int month,int sumDay ){
int weekDay=sumDay%7;//求余,取星期
System.out.println("日\t一\t二\t三\t四\t五\t六");//输出星期
for (int i=0;i<weekDay;i++)
{System.out.print("\t");//判断每个月的第一天为星期几,确定打印的开始
}
//输出4/6/9/11月的日历
if(month==4||month==6||month==9||month==11){
for (int i=1;i<=30;i++)
{ if(sumDay%7==6){System.out.print(i+"\n");}
else{System.out.print(i+"\t");}
sumDay++;
}}
//输出2月的日历,因为2月比较特殊,瑞年跟平年的天数不一样,需要判断
else if(month==2){
if(year%4==0&&year%100!=0||year%400==0){
//打印瑞年2月份的日历
for (int i=1;i<=29;i++)
{ if(sumDay%7==6){System.out.print(i+"\n");}
else{System.out.print(i+"\t");}
sumDay++;}
}else{
//打印平年2月份的日历
for (int i=1;i<=28;i++)
{ if(sumDay%7==6){System.out.print(i+"\n");}
else{System.out.print(i+"\t");}
sumDay++;}
}
}
else{
//打印1/3/5/7/8/10/12月份的日历
for (int i=1;i<=31;i++)
{ if(sumDay%7==6){System.out.print(i+"\n");}
else{System.out.print(i+"\t");}
sumDay++;}
}
}
public static int inputData(){
Scanner in=new Scanner(System.in);
int number=in.nextInt();
return number;
}
}
|
|