方法版的万年历(Java)

public class Methodversion {

                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();

                int week = getWeek(year,month);

                //获取当月的天数

                int day = getDay(year,month);

                //打印日历

                printCanlender(year,month,day,week);

                }

                //打印日历

 public static void printCanlender(int year,int month,int day,int week) {

                System.out.println(year+"年"+month+"月");

                System.out.println("一\t二\t三\t四\t五\t六\t日");

                int count=0;//换行的变量

                //打印前面的空格

                for(int i=1;i<week;i++)

                {

                System.out.print("\t");

                count++;

                }

                for(int j=1;j<=day;j++)

                {

                System.out.print(j+"\t");

                count++;

                if(count%7==0)

                {

                System.out.println();

                }

                }

                }

                //获取星期几

public static int getWeek(int year ,int month)

                {

                int allDay = getAllDay(year,month);

                int week =allDay%7;

                if(week==0) {

                week=7;

                }

                return week;

                }

                //下面是获取总天数

 public static int getAllDay(int year,int month)

                {

                int allDay=0;

                allDay = getAllDayYear(1900,year)+getAllDayMonth(year,1,month)+1;

                return allDay;

                }

                //获取月份的天数

                public static int getAllDayMonth(int year,int startMonth,int endMonth )

                {

                int allDayMonth=0;

                for(int i=startMonth;i<endMonth;i++)

                {

                //获取天数如果是闰年就是

                allDayMonth+=getDay(year,i);

                }

                return allDayMonth;

                }

                //获取年份的总天数

 public static int getAllDayYear(int startYear,int endYear) {

                int allYearOfDay=0;

                //判断是闰年的情况 

                for(int i=startYear;i<endYear;i++)

                {

                if(isLeapYear(i))

                {

                allYearOfDay+=366;

                }

                else

                {

                //判断平年的情况

                allYearOfDay+=365;

                }

                }

                return allYearOfDay;

                }

//获取当月的天数

     public static int getDay(int year,int month) {

                int day=0;

                switch(month) {

                case 1:case 3:case 5:case 7:case 8:case 10:case 12:

                day = 31;

                break;

                case 4:case 6:case 9:case 11:

                day = 30;

                break;

                case 2:

                if(isLeapYear(year)){

                //闰年的情况

                day =29;

                }

                //平年的情况

                else {

                day=29;

                }

        break;

        }

                return day;

        }

        //判断是否是闰年

 public static Boolean isLeapYear(int year) {

        if(year%4==0&&year%100!=0||year%400==0)

        {

        return true;

        }

        return false;

        }

        }

 本题是从1900年到2024年记录,首先判断我们输入的year是否是闰年,我们要获取到1900年到year年一共有多少天,获取月份的天数。我们需要在打印的时候需要获取一个月内的周数,当能被七整除的时候我们就换行,其次我们要打印月份前面的\t(只会出现0,1,2,3,4,5,6)个\t

最后我们的实现图如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值