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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钱金磊 中级黑马   /  2016-4-20 00:25  /  645 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在上基础班,闲来无事,敲了个代码!是实现日历查询的!

import java.util.*;
        public class rili {
        /*
         * 1.千年历,输入当前日期会出现一个日历表;
         * 2.先进行对于大于公元元年的年份进行日期统计;
         * 3.然后利用算法进行计算,得出当前星期数和当前日历表;
         *
         * */

        public static void main(String[] args) {
                Scanner sc=new Scanner(System.in);
                int ts,nian,yueFen,x = 0,riZi;                //定义变量
                System.out.println("输入年\t");
                nian=sc.nextInt();                                        //输入当前年份

                System.out.println("输入月\t");
                yueFen=sc.nextInt();                                //输入当前月份

                System.out.println("输入日\t");
                riZi=sc.nextInt();                                        //输入当前日期
                       
                System.out.println("\t"+"\t"+nian+"\t年\t"+yueFen+"\t月");                //输出日历表的年份和月份
                char[] week={'日','一','二','三','四','五','六'};        //定义顶部的日历星期数

                topPrint(week);                                                                                //输出日历表的星期排序
                if(nian>0){
                        for(int i=0 ;i<=nian-1;i++){                                        //计算有多少年(不含当前年)
                                for(int j=1;j<=12;j++){                                         //计算天数(全年)
                                        x +=tianShu(j,i);                                                //计算所有年的总天数
                                }
                        }
               
                for(int i=1;i<=yueFen-1;i++){                                                 //当前年和以前年的总天数(不含当前月份)
                                x +=tianShu(i,nian);}                                                //进行天数累加
                }
               
                int x1=printweek(x);                //初步计算月的总天数        //计算当前月的1号是星期几       
                x +=riZi;//所有月的总天数                                                        //具体计算当前日期的总天数
                int j=0;                                                                            //定义填充变量
                for (int i=1;i<=(tianShu(yueFen,nian));i++){                //填数字和空白
                        while(j<=x1) {
                                j++;
                                if(x1!=6){                                                                        //判断1号是否为星期六,如果不是星期六填充
                                System.out.print("\t");
                                } else{
                                        break;                                                                        //1号是星期六的话退出循环
                                }
                               
                        }

                        System.out.print(i);//输出日期了!       
                        if(i==riZi){
                                System.out.print("*\t");                //判断是不是当前的日期如果是的话就在后面加个星号标识
                        }else {
                                System.out.print("\t");                        //其余天不用加星号标识符
                                }
                        if((i+x1+1)%7==0)
                                System.out.println();                                                //输了7天换行
                }
                System.out.println();                                                                //换行
               
               
       
                 System.out.println("今天是:星期"+week[printweek(x)]);        //通过当前日期的总天数,算出当前的星期数
                 
               
               

        }
       
        public static void topPrint(char[] week) {                //输出顶部日历表头
                for (int i=0;i<week.length;i++){
                        System.out.print(week[i]+"\t");
                        }
                System.out.println();
        }
       
        public static int tianShu(int yueFen,int nian) {        //判断月的天数,以作累加之用
                int ts;
                switch (yueFen){
                        case 1:                                //1,3,5,7,8,10,12月是31天用case贯穿!
                                ;
                        case 3:
                                ;
                        case 5:
                                ;
                        case 7:
                                ;
                        case 8:
                                ;
                        case 10:
                                ;
                        case 12:
                                ts=31;
                                break;
                        case 4:                                //4,6,9,11月是30天用case贯穿下
                                ;
                        case 6:
                                ;
                        case 9:
                                ;
                        case 11:
                                ts=30;
                                break;
                        case 2:                                //二月比较特殊所以要判断是否是润年!
                                if (nian%4==0&&((nian%100!=0)||(nian%400==0))){
                                        ts=29;
                                }else ts=28;
                                break;
                        default:
                                ts=0;
                }
                return ts;                                //返回月的天数
        }

       
        public static int printweek(int x){                //计算星期数
                return ((x+5)%7);                                                //以0年0月0日是星期1的基础上进行纠正
               
        }
}



2016-04-20_002205.png (9 KB, 下载次数: 16)

截图

截图

评分

参与人数 1技术分 +2 收起 理由
r1503882525 + 2 很给力!

查看全部评分

4 个回复

正序浏览
很赞!!!
回复 使用道具 举报
嗯嗯,不错,学习下
回复 使用道具 举报
支持新人贴
回复 使用道具 举报
顶,我是一楼!自己在自习课上自己给自己命题!自己思考!全程不百度!全是基础班的前五天学的知识点!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马