javaSE 打印日历

在学习用java语言编程一段时间后对方法的调用有了一定的理解,以下是我利用方法调用完成对

日历的打印(注:我的起始日期为1999.1.1)

该题主要考虑平年355天,闰年366天,以及平年的2月份28天,闰年2月份29天

import java.util.Scanner;
public class test1 {
    public static void main(String[] args) {
        Scanner q = new Scanner(System.in);
        System.out.println("年");
        int d = q.nextInt();
        System.out.println("月");
        int f = q.nextInt();
        int daycount = getDelta( d, f);
        int g=monthfe(d,f);
        System.out.print("星期一"+"\t");//打印一排固定放日期的位置
        System.out.print("星期二"+"\t");
        System.out.print("星期三"+"\t");
        System.out.print("星期四"+"\t");
        System.out.print("星期五"+"\t");
        System.out.print("星期六"+"\t");
        System.out.println("星期日"+"\t");

            int num=0;//计数插入的空格数

 //确认所求月份的一号是星期几如果不是周一就在前面补齐空格
            for(int n=1 ;n<=(daycount)%7;n++){
                System.out.print(" "+"\t\t");
                num++;
            }
   
            for(int m=1;m<=g;m++){

                if((m+num)%7==0){ //没打印七个就换一次行
                    System.out.println(m+"\t\t");

                }
                else {
                    System.out.print( m+"\t\t");

                }

            }
        }

       public static int getDelta(int tyear,int tmonth){
        int days=0;
        int tdays=getdays(tyear,tmonth);
           for(int i=1900;i<tyear;i++){//求所求年份与1900相差的年份
               days+=ryear(i)?366:365;//ryear(i)返回true的话就是闰年年返回366平年355
           }

           return days+tdays-1;

    }
//用来返回所求月份1号是所在该月的第几天
    public static int getdays(int year ,int month){
       int  days=1;
        for(int m=1;m<month;m++){
            if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
                 days+=31;
            }else if(m==4||m==6||m==11||m==9){
                 days+=30;
            }else{
                 days+=ryear(year)?29:28;
            }
        }
            return  days;
    }
//用来返回所求月份与1900一月相差的月份天数
    public static int monthfe(int year ,int month){ 
            int monthdays=0;
        for(int m=month;m<=12;m++){
            if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
                return monthdays=31;
            }else if(m==4||m==6||m==11||m==9){
                return monthdays=30;
            }else{
                return monthdays=ryear(year)?29:28;
            }
        }
        return monthdays;
    }
// 判断相差年份是否有闰年
    public static boolean ryear(int year){

        return year%4==0&&year%100!=0||year%400==0;
    }
 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值