Java打印万年历(新手篇——附源码)

本文介绍了如何使用Java编程语言,结合基本知识,实现一个可以输入任意年份和月份的万年历打印程序,包括闰年判断、天数计算和星期几的确定。
摘要由CSDN通过智能技术生成

         Java是一门可以跨平台,面向对象的编程语言,本文利用Java的一些基础知识来打印出万年历。 

准备条件

        首先准备IDEA,它是Java语言开发的集成环境,如果有需要的话可以留言或私信哦

        其次是需要了解到的常识性知识:a.1900年是平年;b.1900.1.1是星期一;c.一个月:3月2日——4月1日是满一个月。

代码讲解

       (1) 把自己所想要年、月的输出部分打印出来

public class Calendar {
     public static void main(String[] args) {//创建程序入口/程序运行的入口
        System.out.println("请输入4位的年份:");//输出语句年和月
        Scanner zhangsan=new Scanner(System.in);//Scanner定义对象
        int year=zhangsan.nextInt();  //把对象复制给年和月
        System.out.println("请输入月份:");
        int month=zhangsan.nextInt();
        System.out.println(year+"年"+month+"月\t\t\t<   >");

        (2)根据输入的月份, 获得该月份对应的天数

        int monthdays=0;     //定义当前月份的总天数;
        if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
            System.out.println("31天");     //1,3,5,7,8,10,12月有31天;
            monthdays=31;
        }else if (month==4 || month==6 || month==9 || month==11){
            System.out.println("30天");     //4,6,9,11月有30天;
            monthdays=30;
        }else {
            if (year%4==0 && year%100!=0 || year%400==0){
                System.out.println("29天"); //能被4整除但不能被100整除或能被400整除的有29天;
                monthdays=29;
            }else {
                System.out.println("28天");
                monthdays=28;   //其他的就是28天;
            }
        }

         (3)计算距离1900年1月1号到输入年份上一年的总天数

        int sumYear=0;  //定义一个总年数
        for (int i=1900;i<year;i++){  //for循环
            if (i%4==0 && i%100!=0 || i%400==0){
                sumYear+=366; //判断平年闰年
            }else {
                sumYear+=365;
            }
        }

        (4)  计算输入月份的上一个月到所输入年份的1月1号的总天数

        int sumMonth=0;   //定义当前年的总月份
        for (int i=1;i<month;i++){  //for循环定义
            if (i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12){
                sumMonth+=31;
            }else if (i==4 || i==6 || i==9 || i==11){
                sumMonth+=30;
            }else {
                if (year%4==0 && year%100!=0 || year%400==0){
                    sumMonth+=29;
                }else {
                    sumMonth+=28;
                }
            }
        }

        (5) 求输入年、月的1月1号是星期几

        int week = (sumYear+sumMonth+1)%7;

         (6)开始打印日历

        System.out.println("一\t二\t三\t四\t五\t六\t日\t");  //打印日历
        
        for (int i=1;i<=week-1;i++){   //打印1号前的空格,空格数是1号所在星期几减1
            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();
            }
        }
    }
}

效果预览

        可以随意输入你想要输入的年份和月份,我们拿2024年3月来运行一下 ,就会得到一个万年历。

总结

        打印万年历并不难,了解并熟练即可。

        不断学习,才能跟得上时代的脚步!

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是Java实现万年历的完整源码: ```java import java.util.Scanner; public class CalendarDemo { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入年份:"); int year = input.nextInt(); System.out.print("请输入月份:"); int month = input.nextInt(); // 计算该月的天数 int days = getDaysOfMonth(year, month); // 计算该月第一天是星期几 int firstDayOfWeek = getFirstDayOfWeek(year, month); // 输出日历表头 System.out.println("日\t一\t二\t三\t四\t五\t六"); // 输出该月的日期 int day = 1; for (int i = 0; i < 6; i++) { for (int j = 0; j < 7; j++) { if (i == 0 && j < firstDayOfWeek) { System.out.print("\t"); } else if (day > days) { System.out.print("\t"); } else { System.out.print(day + "\t"); day++; } } System.out.println(); } } // 计算指定年份指定月份的天数 public static int getDaysOfMonth(int year, int month) { int[] daysOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (month == 2 && isLeapYear(year)) { return 29; } return daysOfMonth[month - 1]; } // 判断指定年份是否为闰年 public static boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } // 计算指定年份指定月份第一天是星期几 public static int getFirstDayOfWeek(int year, int month) { int days = 0; for (int i = 1900; i < year; i++) { days += isLeapYear(i) ? 366 : 365; } for (int i = 1; i < month; i++) { days += getDaysOfMonth(year, i); } days++; return days % 7; } } ``` 实现思路: 1. 要求用户输入年份和月份; 2. 根据输入的年份和月份计算该月的天数; 3. 根据输入的年份和月份计算该月第一天是星期几; 4. 输出日历表头; 5. 输出该月的日期。 实现细节: 1. 计算该月的天数时,需要判断闰年; 2. 判断闰年的公式为:能被4整除但不能被100整除,或者能被400整除; 3. 计算该月第一天是星期几时,需要先计算该年自1900年1月1日以来的天数,然后再加上该月之前的天数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值