java日历的算法,[蓝桥杯][算法提高VIP]任意年月日历输出 (Java代码)详解

解题思路:

1.找到这一年一月份是从星期几开始,计算方法求365或366的余数即可

2.计算这个月之前有多少天,计算出这个月从星期几开始,

3.输出记得到了星期6换行,最后一行不换行

注意事项:

参考代码:import java.util.Scanner;

public class 任意年月日历输出 {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

int year=in.nextInt();

int month=in.nextInt();

int y=2007;int m=1;int week=1;

while(y

if((y%4==0&&y%100!=0)||y%400==0)//闰年366天

{week=week+366%7;}//下一年一月份开始从星期week开始。

else week=week+365%7;

y++;

}

System.out.println("---------------------");

System.out.println(" Su Mo Tu We Th Fr Sa");

System.out.println("---------------------");

//计算这个月之前有多少天

int temp=0;

while(m

if(m==1)temp=31;

if(m==2){

if(((y%4==0&&y%100!=0)||y%400==0)) temp+=29;

else temp+=28;

}

if(m==3)temp+=31;

if(m==4)temp+=30;

if(m==5)temp+=31;

if(m==6)temp+=30;

if(m==7)temp+=31;

if(m==8)temp+=31;

if(m==9)temp+=30;

if(m==10)temp+=31;

if(m==11)temp+=30;

if(m==12)temp+=31;

m++;

}

week=(week+temp%7)%7;//计算这个月第一天星期数

int day=1;temp=-1;//因为第一个输出是星期日

if(((y%4==0&&y%100!=0)||y%400==0)&&m==2){//当这年是闰年且是二月份

while(++temp

System.out.printf("%3d",day);week++;

while(++day<=29){

System.out.printf("%3d",day);

if(week==6&&day!=29)System.out.println();

week++;week=week%7;

}

}

else if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){

while(++temp

System.out.printf("%3d",day);week++;

while(++day<=31){

System.out.printf("%3d",day);

if(week==6&&day!=31)System.out.println();

week++;week=week%7;

}

}

else if(m==4||m==6||m==9||m==11){

while(++temp

System.out.printf("%3d",day);week++;

while(++day<=30){

System.out.printf("%3d",day);

if(week==6&&day!=30)System.out.println();

week++;week=week%7;

}

}

else{

while(++temp

System.out.printf("%3d",day);week++;

while(++day<=28){

System.out.printf("%3d",day);

if(week==6&&day!=28)System.out.println();

week++;week=week%7;

}

}

System.out.println();

System.out.print("---------------------");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值