java实现万年历的打印(通过控制台输出)

java实现万年历的打印(通过控制台输出)

  • 原理:
    • 判断闰年方法: 一个年份能被4整除并且不能被100整除 或者 能被400整除,满足这个条件的就是闰年。闰年一年有366天,不是闰年则是365天
    • 月份的大小月:1,3,5,7,8,10,12月为大月,每月有31天。而4,6,9,11为小月,每月有30天。而2月分为闰年和平常年,2月闰年有29天,2月是平常年则有28天
  • 整体思路: 因为1900年1月1日是从周一开始的,我们可以通过计算输入的年月和1900年比较,相差多少天,再根据这个天数进行日历的后续整除7,取得余数,进行判断,将日历在控制台打印出来
  • 代码实现:
import java.util.Scanner;

public class CalendarTest {
    public static void main(String[] args) {
        //获得年月的相关值,通过键盘输入整数代表年月
        Scanner sc = new Scanner(System.in);
        System.out.println("输入你要要查询的日历年");
        int year = sc.nextInt();
        System.out.println("输入你要要查询的日历月");
        int month = sc.nextInt();
        //输出日历的基本格式,星期
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        //以1900一月一日为开始,计算输入的年月据它的天数,1900年1月1日为星期一
        int days = 0;
        int sum = 0;
        //计算该月份有多少天
        //1,3,5,7,8,10,12为大月,有31天,而4,6,9,11月为小月,有30天
        //2月再闰年有29天,平年28天
        if(month == 1 ||month == 3 ||month == 5 ||month == 7 ||month == 8 ||month == 10 ||month == 12){
            days = 31;
        }else if(month == 2){
            //判断闰年方法:
            //能被4整除和不能被100整除  或者  能被400整除 的为闰年
            if(year%4 == 0 && year%100 !=0 || year % 400 == 0){
                days = 29;
            }else{
                days = 28;
            }
        }else{
            days = 30;
        }
        //判断输入年份跟1900年有多少天
        for(int i = 1900;i < year;i++){
            //判断日否闰年,i代表年份
            if(i%4 == 0 && i%100 !=0 || i % 400 == 0){
                sum += 366;
            }else{
                sum += 365;
            }
        }
        //再根据月份来加上月份的天数
        for(int j = 1;j < month;j++){
            //判断大小月,二月的天数,j代表月份
            if(j == 1 ||j == 3 ||j == 5 ||j == 7 ||j == 8 ||j == 10 ||j == 12){
                //大月
                sum += 31;
            }else if(j == 2){
                //判断闰年方法:
                //能被4整除和不能被100整除  或者  能被400整除 的为闰年
                if(year%4 == 0 && year%100 !=0 || year % 400 == 0){
                    sum += 29;
                }else{
                    sum += 28;
                }
            }else{
                //小月
                sum += 30;
            }
        }
        //在控制台上输出日历
        //由于第一行存在空格,space存储要打印的空格数,这是因为1号不一定从星期1开始
        int space = sum % 7;
        //三元运算符,看天数的余数是否为0,为0,则从星期一开始打印1号,否则就打印它的余数位空白后,进行1号打印
        space = space == 0 ? 0 : space;
        for(int i = 1 ; i <= days + space ;i++){
            //开是否有余数,决定1号在星期几开始
            if(i <= space){
                System.out.print("\t");
            }else{
                System.out.print((i-space) + (i%7==0 ?"\n":"\t"));
            }
        }
    }
}
  • 结果:
    在这里插入图片描述
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值