你会做JAVA万年历表吗?(内配Java学习路线和基础学习视频)
已知条件:
1900年1月1日是星期一。
闰年的特征:能被4整除且又能不能被100整除 ,或能被400整除。
用Java设计一个万年历程序,效果如下:
程序的关键问题是怎样控制所输入的年月的第一天是星期几,第一天是星期一就不需要打印前面的空白,星期二就打印一个空白...
同时还需要在日期是星期天的时候换行。
而要知道某个日期是星期几只能根据1900.1.1日这个条件来判断,距离7天,14天,21,28.....N个7天后都是星期一,因此需要计算所选年月的1号是星期几来确定1号前面的空白距离以及月份中日期是不是星期天的计算。由此,需要计算所选年月与1900.1.1相距的天数,进一步拆分为年份的累计天数和月份的累计天数。
public static void main(String[] a){
int year=1900;
int month=1;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入你要打印的万能历年份:");
year=scanner.nextInt();
System.out.println("请输入你要打印的万能历月份:");
month=scanner.nextInt();
System.out.print("一 ");
System.out.print("二 ");
System.out.print("三 ");
System.out.print("四 ");
System.out.print("五 ");
System.out.print("六 ");
System.out.print("日 ");
System.out.println(" ");
int totalDay=0;
for(int i=1900;i<year;i++){ //1900年1月1日到所输入的年份1月1日的天数,不包括当年
if((i%4==0 && i%100!=0) || i%400==0){ //闰年
totalDay+=366;
}else{
totalDay+=365;
}
}
//累加当年1月到输入月份1号的天数
for(int i=1;i<month;i++){
if(i==2){
if((year%4==0 && year%100!=0) || year%400==0){ //当前这一年是闰年
totalDay+=29;
}else{
totalDay+=28;
}
}else if(i==4 || i==6 || i==9 || i==11){
totalDay+=30; //4,6,9,11月固定30天,2月28或29天,其他月份固定31天
}else{
totalDay+=31;
}
}
int monthDays=0;//当前这个月的天数,用来控制打印多少个数字
if(month==2){
if((year%4==0 && year%100!=0) || year%400==0){ //当前这一年是闰年
monthDays=29;
}else{
monthDays=28;
}
}else if(month==4 || month==6 || month==9 || month==11){
monthDays=30;
}else{
monthDays=31;
}
//总天数与1900.1.1相距多少个7天都是星期一,1900.1.1是星期一,1900.1.8后也是星期一,距离7天,
int _1_xq= (totalDay)%7; //N个7天后都是星期一,余数为0表示星期一,由于我们是从星期一到星期天的顺序显示,是星期一就打印0个 ,星期二就打印1个 ,星期三就打印2个 ...n-1个
//控制月份的第一天的位置,余数为几就打印几个
for(int t=0;t<_1_xq;t++){
System.out.print(" ");
}
for(int i=1;i<=monthDays;i++){
int xq=((totalDay+i-1)%7);//相距多少天要减一,1.1到1.8
System.out.print(i);
if(xq==6){ //余数是六表示星期日,是星期日就换行
System.out.println(" ");
}else{
System.out.print(" ");
}
}
}
运行结果:
=====================================
可获取Java视频资料和学习路线:里面包含源码、课件、工具下载!
你学会了吗?学不会请看这里:
可获取Java视频资料和学习路线:里面包含源码、课件、工具下载!
1.在评论区转发/评论
2.在最下方星号点击收藏一下
3.利用简信,私信小编: 学习