JAVA月历

重点知识:如何计算一个月1号前的空格数

    -----1900年到本月1号之前天数的总和,再处以七得到的余数就等于每个月1号前所空出来的天数.(1900年1月1号是星期1)

    年分为闰年和平年,所以需要判断一下,(可以被4整除但不能被100整除||可以被400整除)闰年天数就是366天,否则就是平年365;闰月2月需要判断一下,闰月天数就是29天,否则就是28

   ----打印月历时,一行输出7个换行,即如果加上空格是七的倍数,则换行


输入样例:

输入一行,两个正整数,分别代表年份和月份。

2019 9

输出样例:

严格按样例格式输出一个月的日历。 第1行输出月份简称和年份,中间有个圆点和空格。 第2行输出表头,为星期一至星期日的缩写,每个单词之间一个空格。 第3行为28个减号。 接下来的几行是日历内容,每个日期输出时占3列,日期前后之间再加1个空格,保证与相对应的星期名称右对齐。

SEP. 2019
Mon Tue Wed Thu Fri Sat Sun
---------------------------
                          1
  2   3   4   5   6   7   8
  9  10  11  12  13  14  15
 16  17  18  19  20  21  22
 23  24  25  26  27  28  29
 30

打印月历代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int y=sc.nextInt(),m=sc.nextInt();

        int allday=0;
        for(int i=1900;i<y;i++) allday += runyear(i)? 366 : 365;
        System.out.println(allday);
        for(int i=1;i<m;i++) allday += monyhday(i,y);
          /*计算每个月1号前所空出来的天数*/
        int ink=allday%7;

   /*打印月历*/
        System.out.println(monTH(m)+" "+y);
        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        System.out.println("---------------------------");

          /*空格打印1号前的天数*/
        for(int i=0;i<ink;i++){
            if(i>0) System.out.print(" ");
            System.out.print("   ");
        }

        int day=monyhday(m,y);

        for(int i=1;i<=day;i++){
            /*两个日期间有空格*/
            if((i+ink)%7!=1) System.out.print(" ");
            System.out.printf("%3d",i);
            /*加上空格是七的倍数,则换行*/
            if((i+ink)%7==0)System.out.println();
        }

    }
       /*判断是否为闰年*/
    public static boolean runyear(int k){
        return  k%400==0||(k%4==0&&k%100!=0);
    }
       /*返回每月的天数*/
    public static int monyhday(int i,int year)
    {
        if(i==1||i==3||i==5||i==7||i==8||i==10||1==12) return 31;
        else if(i==2) return runyear(year)?29:28;
        else return  30;
    }
       /*返回月份缩写*/
    public  static String monTH(int k){
        String s="";
    switch (k){
                case 1:s="JAN.";break;
                case 2:s="FEB.";break;
                case 3:s="MAR.";break;
                case 4:s="APR.";break;
                case 5:s="MAY.";break;
                case 6:s="JUN.";break;
                case 7:s="JUL.";break;
                case 8:s="AUG.";break;
                case 9:s="SEP.";break;
                case 10:s= "OCT.";break;
                case 11:s= "NOV.";break;
                case 12:s= "DEC.";break;
        }
        return s;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值