黑马程序员技术交流社区

标题: 控制台版万年历,申请版主加精 [打印本页]

作者: xfbyxq    时间: 2016-7-4 02:08
标题: 控制台版万年历,申请版主加精
本帖最后由 xfbyxq 于 2016-7-4 02:10 编辑

搞到凌晨2点我才弄好,完全自己写的。申请版主加精
[hide=d100]import java.util.*;
class Calender2 {
        public static void main(String[] args) {
                /*
                从1900到指定年指定月得出相应的日历
                思路
                1900年1月第一个星期是从1开始的
                到指定年指定月之间只要得出总共多少天%7  就能到到指定月份的开始星期数
                */

                Scanner sc=new Scanner(System.in);
                System.out.println("请输入1900以上的年份");
                System.out.println("-----------------------------------------------------------");
                System.out.println("请输入一个年份");
                int year=sc.nextInt();
                System.out.println("请输入一个月份");
                int month=sc.nextInt();
               

                System.out.println("------------------------------------------------------------");
                printCalendar(year,month);
                System.out.println();

        }

        //打印日历
        public static void printCalendar(int year,int month){
                System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日");
                //定义变量来保存从1900年到指定年的总天数
                int sum=0;
                sum+=getDay(year);//获取总天数
                //遍历指定年剩下的月份的总天数
                for (int x=1;x<month ;x++ ) {
                        sum+=getMouthDay(x,year);//获取每个月的天数累加
                }

                //获取指定月份总共有多少天
                int mouthDay=getMouthDay(month,year);

                //根据指定月份的天数来循环
                int x=1;
                while(x<=mouthDay){
                        //因为日历每行要输出7天,所以建立一个循环遍历7次来打印
                        for (int h=0;h<7 ;h++ ) {

                                //因为有些月起始星期是不固定的,所以要先判断先输出多少次空字符
                                //利用总天数%7可以得到本月起始星期
                                if(x==1 && h<sum%7){
                                        System.out.print("      \t");
                                        continue;
                                }
                                
                                //打印第几天
                                System.out.print("   "+x+"  \t");
                                
                                //这里要做个判断当x值已经到达当前月最后一天时,要跳出循环
                                if(x>=mouthDay) return;
                                //每当打印了一次天数就把x累加1
                                x++;
                        }
                        System.out.println();
                }
        }

        //获取指定年月的天数
        public static int getMouthDay(int mouth,int year){
               
                int sum=0;
                //根据月份返回总共有多少天
                switch(mouth){
                                case 1:
                                case 3:
                                case 5:
                                case 7:
                                case 8:
                                case 10:
                                case 12:
                                        sum=31;
                                        break;
                                case 4:
                                case 6:
                                case 9:
                                case 11:
                                        sum=30;
                                        break;
                                case 2:
                                        if(isLeapYear(year)){
                                                sum=29;
                                        }else{
                                                sum=28;
                                        }
                                        break;
                }

                return sum;
        }

        //获取从1900年到指定年所有天数
        public static int getDay(int year){
                //定义变量来保存总天数
                int sum=0;
                //循环遍历从1900年到指定年
                for (int x=1900;x<year ;x++ ) {
                        /*
                        如果当前年是瑞年就+=366天否则+=365天
                        */
                        if(isLeapYear(x)){
                                sum+=366;
                        }else{
                                sum+=365;
                        }
                }

                return sum;
        }

        //判断是否是瑞年
        public static boolean isLeapYear(int year){
                if((year%4==0&&year%100!=0)||year%400==0){
                        return true;
                }else{
                        return false;
                }
        }
}
[/hide]



作者: 扬帆起航fonnson    时间: 2016-7-4 15:02
让我揭开面纱瞅瞅
作者: yin12310    时间: 2016-7-4 17:46
看看到底是个什么样
作者: Vision-V    时间: 2016-7-4 19:53
想看~~~~~
作者: cat73    时间: 2016-8-1 21:20
不知道是做到什么程度的万年历呢。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2