用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<mouth;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+"\t\t");
                        //满足条件时,日期开始变动
                        count++;
                        //改变旗帜变量,直至完成天数输出
                        dayFlag=true;
                        //判断天数是否输出完成
                        if(count==secondMounth+1){
                            //当天数输出完成时,改变旗帜变量结束日期输出
                            dayFlag=false;
                        }
                    }else{
                        //用来控制格式
                        System.out.print("\t\t");
                    }
                    //每循环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+"\t\t");
                        count++;
                        //改变旗帜变量,直至完成天数输出
                        dayFlag=true;
                        //判断天数是否输出完成
                        if(count==32){
                            //当天数输出完成时,改变旗帜变量结束累加
                            dayFlag=false;
                        }
                    }else{
                        System.out.print("\t\t");
                    }
                    //每循环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+"\t\t");
                        count++;
                        //改变旗帜变量,直至完成天数输出
                        dayFlag=true;
                        //判断天数是否输出完成
                        if(count==31){
                            //当天数输出完成时,改变旗帜变量结束累加
                            dayFlag=false;
                        }
                    }else{
                        System.out.print("\t\t");
                    }
                    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;
    }

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
java 万年历程序代码 package test2; import java.util.Scanner; public class Test2{ public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.print("请输入年份:"); int year=input.nextInt(); System.out.print("\n请输入月份:"); int month=input.nextInt(); System.out.println(); int totalDays=0; if(year>=1900) { for(int i=1900;i<year;i++) { if((i%4==0 && i0!=0)||(i%400==0)) totalDays+=366; else totalDays+=365; } int daysOfMonth=0; int days; for(int i=1;i<month;i++) { switch(i) { case 2: if((year%4==0 && year0!=0)|| year%400==0) days=29; else days=28; break; case 4: case 6: case 9: case 11: days=30; break; default: days=31; } daysOfMonth+=days; } switch(month) { case 2: if((year%4==0 && year0!=0)|| year%400==0) days=29; else days=28; break; case 4: case 6: case 9: case 11: days=30; break; default: days=31; } totalDays+=daysOfMonth; int firstDay=(totalDays)%7+1; if(firstDay==7)firstDay=0; System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");//显示月历 for(int i=0;i<firstDay;i++) System.out.print("\t"); for(int i=1;i<=days;i++) { System.out.print(i+"\t"); if((i-1)%7+firstDay==6) System.out.println(); } } else if(year>0&&year<1900) { for(int i=1899;i>year;i--) { if((i%4==0 && i0!=0)||(i%400==0)) totalDays+=366; else totalDays+=365; } int daysOfMonth=0; int days; for(int i=12;i>=month;i--) { switch(i) { case 2: if((year%4==0 && year0!=0)|| year%400==0) days=29; else days=28; break; case 4: case 6: case 9: case 11: days=30; break; default: days=31; } daysOfMonth+=days; } switch(month) { case 2: if((year%4==0 && year0!=0)|| year%400==0) days=29; else days=28; break; case 4: case 6: case 9: case 11: days=30; break; default: days=31; } totalDays+=daysOfMonth; int firstDay=8-(totalDays)%7; if(firstDay==7)firstDay=0; if(firstDay==8)firstDay=1; System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六"); for(int i=0;i<firstDay;i++) System.out.print("\t"); for(int i=1;i<=days;i++) { System.out.print(i+"\t"); if((i-1)%7+firstDay==6) System.out.println(); } } System.out.println("\n程序结束"); } }
以下是用Java一个简单的万年历程序,可以输入年份和月份,输出该月的日历: ```java import java.util.Scanner; public class Calendar { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入年份:"); int year = scanner.nextInt(); System.out.print("请输入月份:"); int month = scanner.nextInt(); int days = getDaysOfMonth(year, month); // 获取该月的天数 int week = getFirstDayOfWeek(year, month); // 获取该月的第一天是星期几 System.out.println("\n----------------------"); System.out.println(" " + year + "年" + month + "月"); System.out.println("----------------------"); System.out.println("日 一 二 三 四 五 六"); // 打印日历 int count = 0; for (int i = 1; i <= days; i++) { if (i == 1) { for (int j = 0; j < week; j++) { System.out.print(" "); count++; } } System.out.printf("%2d ", i); count++; if (count % 7 == 0) { System.out.println(); } } } // 获取该月的天数 public static int getDaysOfMonth(int year, int month) { if (month == 2) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return 29; } else { return 28; } } else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else { return 31; } } // 获取该月的第一天是星期几 public static int getFirstDayOfWeek(int year, int month) { int h = 1; int m = 13; int k = year % 100; int j = year / 100; int q = 1; if (month == 1 || month == 2) { month += 12; q = 0; } int week = (h + 26 * (m + 1) / 10 + k + k / 4 + j / 4 + 5 * j + q) % 7; return (week + 6) % 7; } } ``` 运行结果如下: ``` 请输入年份:2021 请输入月份:9 ---------------------- 2021年9月 ---------------------- 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值