栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用Java写的一个万年日历

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Java写的一个万年日历

用Java写的一个万年日历

当我们学过分支结构语句和循环语句后,我们可以简单的完成一个小案例:
通过输入具体的年月日,输出此年此月此日为星期几,并打印此月日历。

说一下我的思路:
首先第一步,先实现输入年月日,然后输出星期几。
要实现这一步,就得有输入,以及定义一个静态方法用来寻找星期。
第二步,判断年份为闰年还是平年
通过简单if else判断即可,并保留年份为闰年还是平年的信息。
第三步,设置月份选择器,通过月份选择器,选择此月日历输出
使用switch case即可 细节:使用穿透,可以将相同天数的月份可以放在一起。
注意 :特殊月份2月应该单独选择,并在选择后根据第二步保存的年份信息,
判断天数。
第四步,确定日历格式,先输出星期,随后按照日期在所对应的星期下输出。
为解决这一步,我将一个月的天数默认设为42即6行7列,然后找到输入年月后此月
对应的第一天是星期几,找到第一行中对应星期,然后按顺序输出日期。
第五步,处理细节
对输入,进行判断。重新排版,确保美观。

附上代码:

 public static void main(String[] args) {
        //输入年,月,日
        String[] week={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
        Scanner getNumber=new Scanner(System.in);
        //定义年
        int year;
        //定义月
        int mouth;
        //定义天
        int day;
        //定义变量sum,用来接收某年某月某日累加天数
        int sum=0;
        //定义闰,平年旗帜
        boolean yearFlag=false;
        //定义日期输出控制旗帜
        boolean dayFlag=false;
        //定义sumfirstday,用来判断当月一号为星期几
        int sumfirstday;
        //定义天数累加变量count并初始化
        int count=1;
        //定义此年此月此日为星期几
        int weekday;
        //判断输入年份是否大于0
        while (true){
            System.out.println("请输入年份");
            year = getNumber.nextInt();
            if(year>0){
                break;
            }
        }
        //判断输入月份是否大于0且小于等于12
        while (true){
            System.out.println("请输入月份");
            mouth = getNumber.nextInt();
            if(mouth>0&&mouth<=12){
                break;
            }
        }
        //判断输入天是否大于0且小于等于31
        while (true){
            System.out.println("请输入日期");
            day = getNumber.nextInt();
            if(day>0&&day<=31){
                break;
            }
        }
        //判断闰,平年
        if(year%4==0&&year%100!=0||year%400==0){
            System.out.println(year+"年是闰年");
            yearFlag=true;
        }else{
            System.out.println(year+"年是平年");
        }
        //计算当年某日累加天数
        for(int i=1;i
            if(mouth==1){
                sum=day;
                break;
            }
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
                sum+=31;
            }else if(i==4||i==6||i==9||i==11){
                sum+=30;
            }else{
                if(yearFlag==true){
                    sum+=29;
                }else{
                    sum+=28;
                }
            }
        }
        //获取当前月份一号,累加天数
        sumfirstday=sum+1;
        //接收当年某日累加天数
        sum+=day;
        //计算此年此月此日为星期几
        weekday=findWeekDay(year,sum);
        //输出星期一至周日
        for(int i=0;i<7;i++){
            System.out.print(week[i]+"t");
        }
        System.out.println("");
        //根据月份,输出日历表
        switch (mouth){
            //此为特殊月份二月
            case 2:
                //设置二月天数
                int secondMounth=0;
                //判断此年为闰年还是平年
                if(yearFlag==true){
                    secondMounth=29;
                }else {
                    secondMounth=28;
                }
                //设置日历表总数为42
                for(int i=1;i<=42;i++){
                    //判断此月一号为星期几,当i与星期几匹配时,开始按顺序输出天数
                    if(i==findWeekDay(year,sumfirstday)||dayFlag==true){
                        System.out.print(count+"tt");
                        //满足条件时,日期开始变动
                        count++;
                        //改变旗帜变量,直至完成天数输出
                        dayFlag=true;
                        //判断天数是否输出完成
                        if(count==secondMounth+1){
                            //当天数输出完成时,改变旗帜变量结束日期输出
                            dayFlag=false;
                        }
                    }else{
                        //用来控制格式
                        System.out.print("tt");
                    }
                    //每循环7次换行
                    if(i%7==0){
                        System.out.println("");
                    }
                }
                break;
            //此为月天数31的月份
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                //设置日历表总数为42
                for(int i=1;i<=42;i++){
                    //判断此月一号为星期几,当i与星期几匹配时,开始按顺序输出天数
                    if(i==findWeekDay(year,sumfirstday)||dayFlag==true){
                        System.out.print(count+"tt");
                        count++;
                        //改变旗帜变量,直至完成天数输出
                        dayFlag=true;
                        //判断天数是否输出完成
                        if(count==32){
                            //当天数输出完成时,改变旗帜变量结束累加
                            dayFlag=false;
                        }
                    }else{
                        System.out.print("tt");
                    }
                    //每循环7次换行
                    if(i%7==0){
                        System.out.println("");
                    }
                }
                break;
            //此为月天数30的月份
            default:
                //设置日历表总数为42
                for(int i=1;i<=42;i++){
                    //判断此月一号为星期几,当i与星期几匹配时,开始按顺序输出天数
                    if(i==findWeekDay(year,sumfirstday)||dayFlag==true){
                        System.out.print(count+"tt");
                        count++;
                        //改变旗帜变量,直至完成天数输出
                        dayFlag=true;
                        //判断天数是否输出完成
                        if(count==31){
                            //当天数输出完成时,改变旗帜变量结束累加
                            dayFlag=false;
                        }
                    }else{
                        System.out.print("tt");
                    }
                    if(i%7==0){
                        System.out.println("");
                    }
                }
                break;
        }

        System.out.println(year+"年"+mouth+"月"+day+"日是星期"+weekday);

    }
/定义静态方法用来计算星期
    public static int findWeekDay(int year,int sum)
    {
        //根据年份以及所求日期在此年份中累积的天数来求星期
        int Weekday=(year-1+(year-1)/4 -(year-1)/100 +(year-1)/400+sum)%7;
        //因为上述方法结果是被模了7,所以这里要将0改为7
        if(Weekday==0){
            Weekday=7;
        }
        //返回星期
        return Weekday;
    }

新人第一次写,希望大家看完这篇能够理解。有不足,欢迎在评论区指出。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002676.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号