用java实现一个简单的日历

通过编写程序,输入年份月份,实现判断年份是否为闰年,月份有多少天,然后打印日历。

1.首先通过boolean判断是否为闰年
public static boolean isRun(int year)
    {
        if((year%4==0&&year%100!=0)||(year%400==0))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

2.然后用switch-case语句返回月份对应的天数,注意2月需要再次判断年份是否为闰年
public static int getMonthDays(int year,int month)
    {
        int days = 30; //默认每个月是30天
        switch(month)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                days = 31;
                break;
            case 2:
                if(MyCalendar.isRun(year))
                {
                    days = 29;
                }
                else
                {
                    days =28;
                }
                break;
        }
        return days;
    }
3.这个是老师临时让加上去,写一个方法算出统计这个月的第一天的前一天距离1900-1-1过了多少天。
//先算整年的天数,再算这一年这个月第一天前一天之前的天数
public static int getTotalDays(int year,int month)
    {
        int totalDays = 0;
        for(int i=1900;i<year;i++)
        {
            if(MyCalendar.isRun(i))
            {
                totalDays+=366;
            }
            else
            {
                totalDays+=365;
            }
        }

        for(int i=1;i<month;i++)
        {
            totalDays+=MyCalendar.getMonthDays(year, i);
        }

        return totalDays;

    }

最后写主函数(注意先打印前面的空格,再打印日期,日期是每七天一换行):
public static void main(String[] args) {

        int year;//年份
        int month;//月份
        int days ;//这个月的天数
        int totalDays;//这个月的第一天距离1900-1-1过来多少天
        int day;//表示这个月的第一天是星期几?

        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(MyCalendar.isRun(year))
        {
            System.out.println(year+"年是闰年");
        }
        else
        {
            System.out.println(year+"年是平年");
        }
        days = MyCalendar.getMonthDays(year, month);
        System.out.println(year+"年"+month+"月有:"+days+"天.");
        totalDays = MyCalendar.getTotalDays(year, month);
        System.out.println("这个月的第一天距离1900-1-1过了:"+totalDays+"天!");
        totalDays++;
        day = totalDays%7;
        System.out.println("星期:"+day);

        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
        //先打印前面的空格
        int iCount=0; //计数器
        for(int i=0;i<day;i++)
        {
            System.out.print("\t\t");
            iCount++;
        }
        //打印日期
        for(int i=1;i<=days;i++)
        {
            System.out.print(i+"\t\t");
            iCount++;
            if(iCount%7==0)
            {
                System.out.println();
            }

运行结果已经试过了,就不放在上边了,完整代码如下:

import java.util.Scanner;

/*  假设:1900-1-1 是星期一。
 *
 *
 * */

public class MyCalendar {

    //判断是否是闰年
    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 = 30; //默认每个月是30天
        switch(month)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                days = 31;
                break;
            case 2:
                if(MyCalendar.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(MyCalendar.isRun(i))
            {
                totalDays+=366;
            }
            else
            {
                totalDays+=365;
            }
        }

        for(int i=1;i<month;i++)
        {
            totalDays+=MyCalendar.getMonthDays(year, i);
        }

        return totalDays;

    }
    
    public static void main(String[] args) {

        int year;//年份
        int month;//月份
        int days ;//这个月的天数
        int totalDays;//这个月的第一天距离1900-1-1过来多少天
        int day;//表示这个月的第一天是星期几?

        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(MyCalendar.isRun(year))
        {
            System.out.println(year+"年是闰年");
        }
        else
        {
            System.out.println(year+"年是平年");
        }
        days = MyCalendar.getMonthDays(year, month);
        System.out.println(year+"年"+month+"月有:"+days+"天.");
        totalDays = MyCalendar.getTotalDays(year, month);
        System.out.println("这个月的第一天距离1900-1-1过了:"+totalDays+"天!");
        totalDays++;
        day = totalDays%7;
        System.out.println("星期:"+day);

        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
        //先打印前面的空格
        int iCount=0; //计数器
        for(int i=0;i<day;i++)
        {
            System.out.print("\t\t");
            iCount++;
        }
        //打印日期
        for(int i=1;i<=days;i++)
        {
            System.out.print(i+"\t\t");
            iCount++;
            if(iCount%7==0)
            {
                System.out.println();
            }
        }

    }

}

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值