用java写了一个简单的月历

根据用户输入的年份和月份,显示出当月的信息,这里有比较详细的注释,所以不再一一解释了,代码如下:

 

package homework;

import java.util.Scanner;
public class myFirstCalendar{
    public static void main(String[] args) {
        int year=0 ;           //用来接收用户所输入的年份,先初始化为0;
        int month = 0;       //用来接收用户所输入的月份
        int alldays = 0;      //定义一个求总天数的变量,初始赋值为0;用来累加总天数
        int yearnumber ;    //定义一个基准变量时间年,待会赋初值为1900年,在它的基础上累加年,进而求年的天数;
        int n;               //待会用来打印月历的body
        int week ;              //记录星期几
        int monthOfDay ; //用来计算当月天数
        boolean isLeapYear = false;//定义一个布尔型的变量,用来判断是平年还是闰年,等会要用到3次
        Scanner input = null;
        System.out.println("请输入年份 :"); //提示用户输入年份
        input = new Scanner(System.in);
        if (input.hasNextInt()) {
            year = input.nextInt();                    //用户输入后,把输入的值付给year
        }
        System.out.println("请输入月份 :");//提示用户输入月份
        if (input.hasNextInt()) {
            month = input.nextInt();               //用户输入后,把输入的值付给month
        }
        input.close();                                     //用户输入年份和月份后关闭输入
        /*
        累加从1900年开始,到用户输入的年份结束为止的间隔的这些年的总天数
         */
        for (yearnumber = 1900; yearnumber < year; yearnumber++) {
            //判断从1900年开始,以后的每一年是否是闰年,一直到用户输入的前一年完
            if ((yearnumber % 4 == 0 && yearnumber % 100 != 0) || (yearnumber % 400 == 0)) {
                isLeapYear = true;
            } else {
                isLeapYear = false;
            }
            if (isLeapYear) {
                alldays = alldays + 366;                  //如果是闰年,则加上366天
            } else {
                alldays= alldays + 365;                   //否则,加上365天
            }
        }
        //计算月份的天数
        //判断用户所输入的年份是不是闰年;为待会计算用户所输入年份的月份天数
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            isLeapYear = true;                     }
        for (int i = 1;i < month; i++) {                      //累计从1月开始到用户所输入的月份的前一个月的总天数
            switch (i) {                                                //用switch分支语句判断月份的天数
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:                                                //如果是以上几个月,则当月的总天数为31天
                    alldays = alldays + 31;  break;                   //如果是大月,在累加年的天数的基础上加上31;
                case 2:                                                  //如果是二月,则还需判断用户输入的年份是平年还是闰年
                    if (isLeapYear) {
                        alldays = alldays + 29;                  //如果是闰年,则加上29天
                    } else {
                        alldays = alldays + 28;                  //平年,加上28天
                    }
                    break;
                default:                alldays = alldays + 30;       //除了以上三种情况的所有情况,加上30
                    break;
            }
        }                                                             //到这里,总天数就累加完成了,是分为两个部分来求和的
        //接下来计算用户输入的月份有多少天
        switch (month) {
            case 1:                                      //用switch()分支语句来确定用户输入的月份的天数;即要显示出来的天数
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:                                           //如果用户输入的月份是以上几个数字的话;则等会显示打印31天
                monthOfDay = 31;

                break;
            case 2:                                            //判断用户输入的月份所在的年是不是闰年
                if (isLeapYear) {
                    monthOfDay = 29;                          //如果是闰年,待会打印29天
                } else {
                    monthOfDay = 28;                          //否则,打印28天
                }
                break;
            default:                                          //除以上3种情况的所有情况,等会打印30天
                monthOfDay = 30;
                break;

        }
        System.out.println("\t"+year+"年"+"\t\t"+month+"月");//打印月历的标题
        /*
        以下代码是打印用户所输入月份的核心代码,
         */
        week = alldays % 7;                                //计算用户输入的月份的第一天是星期几,取值范围为0-6;打印时用\t来辅助
        System.out.println("一\t二\t三\t四\t五\t六\t日");    //打印月历的星期数,从星期一开始到星期天
        for (int i = 1; i <= week; i++) {                  //满足条件,先\t,如果week=0;则不打印
            System.out.print("\t");
        }
        for ( n = 1; n <= (7 - week); n++) {               //打印月历的第一行
            System.out.print(n + "\t");
        }
        System.out.println();                              //月历第一行打印完成,换行打印第二行,光标进入第二行

        for (; n <= monthOfDay; n++) {                     //打印后面的月历的内容
            System.out.print(n + "\t");
            if ((n + week) % 7 == 0) {                     //打印到星期日就换行,然后继续打印
                System.out.println();
            }
        }
        System.out.println();
    }

}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值