JAVA 制作万年历

思路:

先注意区分每年有31天的月份(1月,3月,5月,7月,8月,10月,12月)和有30天的月份(4月,6月,9月,11月),判断平闰年得到2月的天数。再判断输入的年份距离1900年的整年天数差,判断输入的月份距离该年1月的整月天数差,最后判断每个月的1号是周几。最后打印输出万年历。

代码:

 public static void main(String[] args) {
        //1.第一阶段,准备阶段
        Scanner input=new Scanner(System.in);
        System.out.println("请输入4位的年份");
        int year=input.nextInt();
        System.out.println("请输入月份:");
        int month=input.nextInt();
        System.out.println(year+"年"+month+"月\t\t\t\t\t< >");
        //2.根据输入的月份获得该月份对应的天数
        int monthdays=0;
        if (month==1 ||month==3 ||month==5 ||month==7 ||month==8 ||month==10 || month==12){
            monthdays=31;
        }else if (month==4 ||month==6 ||month==9 ||month==11){
            monthdays=30;
        }else {
            if ((year%4==0 && year%100!=0) || year%400==0){
                monthdays=29;
            }else {
                monthdays=28;
            }
        }
        //3.求输入的月份的1号是周几
        //(3.1)求输入年份 距离1900年的整年天数差是多少天?
        int sumYear=0;
        for (int i=1900;i<year;i++){
            if(i%4==0 && i%100!=0 ||i%400==0){
                sumYear=sumYear+366;
            }else{
                sumYear=sumYear+365;
            }
        }
        //(3.2)求输入月份 距离输入年份的1月的整月天数差
        int sumMonth=0;
        for(int i=1;i<month;i++){
            if(i==1|| i==3 ||i==5 ||i==7 ||i==8 ||i==10 ||i==12){
                sumMonth=sumMonth+31;//简化  sumMonth+=31;
            }else if(i==4|| i==6 ||i==9 ||i==11 ){
                sumMonth=sumMonth+30;
            }else{
                if(year%4==0 && year%100!=0 || year%400==0){
                    sumMonth=sumMonth+29;
                }else{
                    sumMonth=sumMonth+28;
                }
            }
        }
        //(3.3) 求 输入年输入月的1号是周几?
        int week=(sumYear+sumMonth+1)%7;
        //System.out.println(year+"年"+month+"月1号是周"+week);
        //4.打印日历:
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        //打印空格:
        for(int i=1;i<=week-1;i++){
            System.out.print("\t");
        }
        //打印日历
        for(int i=1;i<=monthdays;i++){
            System.out.print(i+"\t");
            if((sumYear+sumMonth+i)%7==0){
                System.out.println();
            }
        }
    }

运行结果:

总结:

编码万年历时一定要注意区分月份的天数,尤其是2月的天数,需要知道如何计算2月的天数,不然很容易出错。在编译 年 月 日时,先编译年份,再编译月份,最后需要判断每月1号是周几,这个是容易忽视的点,一定要进行判断。最后输出万年历,查看运行结果是否正确。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值