A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 意念痴心灬戒贪 中级黑马   /  2015-12-11 15:41  /  774 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位大神好,这个程序太复杂了,怎么能够简化一下呀?
//用户从屏幕上输入一个年份和月份 ,打印出该月的日历
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;
                }
        }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马