Java_Base万年历

该博客详细介绍了如何编写一个万年历程序,包括输入年月、计算月份天数、打印日期等步骤。通过计算1900年1月1日到指定日期的总天数来确定第一天是周几,并据此打印出月份的日历布局。博客内容涉及日期计算、循环和条件判断等编程基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 首先让我们看一下万年历思路:
                 1、输入日期
                 2、计算输入的月份是多少天
                 3、打印月份的天数
                 4、计算出输入的月份的第一天是周几
                     4.1、求出1900年1月1日到输入的日期总天数
                     4.2、总天数%7  求出周几
                     4.3、周几-1 求出空格数
                 5、打印空格
                 6、修改换行条件:(空格数+打印的日期)%7

代码如下↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年:");
        int n = sc.nextInt();
        System.out.println("请输入月:");
        int y = sc.nextInt();
        
        //判断输入的月 有多少天
        //31天:1 3 5 7 8 10 12
        int ts = 0;//存月份的天数
        if(y==1||y==3||y==5||y==7||y==8||y==10||y==12) {
            ts = 31;
        }else if(y==4||y==6||y==9||y==11) {
            ts = 30;
        }else if(y==2) {
            ts = 28;
            if(n%4==0 &&n%100!=0 ||n%400==0) {
                ts = 29;
            }
        }
        
        //1900年1月1日 是周一
        //求出空格数
        //求整年
        int sumDay = 0;
        for(int i=1900;i<n;i++) {
            sumDay+=365;
            if(i%4==0&&i%100!=0 || i%400==0) {
                sumDay+=1;
            }
        }
        //求整月 y=10
        for(int i=1;i<y;i++) {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) {
                sumDay+=31;
            }else if(i==4 ||i==6||i==9||i==11) {
                sumDay+=30;
            }else if(i==2) {
                sumDay+=28;
                if(n%4==0&&n%100!=0 || n%400==0) {
                    sumDay+=1;
                }
            }
        }
        //加上1日
        sumDay+=1;
        //求出周几
        int w = sumDay%7;
        //如果整除 说明是周7
        if(w==0) {
            w = 7;
        }
        //计算空格数  周几-1
        int kg = w-1;
        System.out.println("空格数:"+kg);
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        for(int i=1;i<=kg;i++) {
            System.out.print("\t");
        }
        //打印月中的每一天
        for(int i=1;i<=ts;i++) {
            System.out.print(i+"\t");
            if((i+kg)%7==0) {//打印了空格 (空格+数字) %7
                System.out.println();
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值