Java之万年历

来源:互联网 发布:淘宝怎么发布视频直播 编辑:程序博客网 时间:2024/06/10 02:02

很多刚学Java的小伙伴都估摸回去实现万年历这个功能,至少怎么实现这个功能,这就需要了解万年历的平闰年的计算方法等。
万年历的实现主要是靠循环实现,程序基本上也都加了注解,而且尽可能的对程序进行了优化,大家有需要可以参考一下。

import java.util.Scanner;public class MyCalendar {    /*     * 功能:万年历     * 控制台:输入年份和月份,打印出该月的日历     * 实现步骤:判断平闰年 计算总天数  打印月的第一天星期几  打印空格  打印     * */    public static void main(String[] args) {        MyCalendar calendar = new MyCalendar();        calendar.menu();    }    //主菜单方法    public void menu(){        int year; //年        int month; //月份        int day; //天        int totalDays; //这个月第一天离1900-1-1过了多少天        int monthDays; //该月的总天数        Scanner in = new Scanner(System.in);        System.out.println("********欢迎使用万年历**********");        System.out.println("请输入年份:");        year = in.nextInt();        System.out.println("请输入月份:");        month = in.nextInt();        System.out.println("你输入的是"+year+"年"+month+"月");        if(isRun(year)){            System.out.println(year+"年"+"是闰年!");        }else{            System.out.println(year+"年"+"是平年!");        }        System.out.println("*****************************");        monthDays = getMonthDays(year, month);        totalDays = getTotalDays(year, month);        totalDays++; //总天数        day = totalDays%7; //得到星期几        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");        int iCount = 0;//计数器,用来决定是否换行        for (int i = 0; i < day; i++) {            System.out.print("\t");            iCount++;        }        //打印该月日历        for (int i = 1; i <= monthDays; i++) {            System.out.print(i+"\t");            iCount++;            if(iCount%7==0){                System.out.println();            }        }    }    //判断是否是闰年    public static boolean isRun(int year){        if((year%4==0 && year%100!=0) || (year%400==0)){            return true;        }else{            return false;        }    }    //根据年份和月份,返回该月的天数    public static int getMonthDays(int year,int month){        int days = 31;        switch (month) {            case 4:            case 6:            case 9:            case 11:                days = 30;                break;            case 2:                if(isRun(year)){                    days = 29;                }else{                    days = 28;                }                break;        }        return days;    }    //计算输入的年份和月份,计算这个月离1900-1-1过了多少天    public static int getTotalDays(int year,int month){        int totalDays = 0;        //计算年的天数        for (int i = 1900; i < year; i++) {            if(isRun(i)){                totalDays+=366;            }else{                totalDays+=365;            }        }        //计算月的天数        for (int i = 1; i < month; i++) {            totalDays+=getMonthDays(year, i);        }        return totalDays;    }}

不到位的地方也希望大家指正,谢谢!

0 0
原创粉丝点击