java语言月历和年历

输入某年得到年历,输入某年某月即得到月历

综合考虑,年历比较简单,可以调动12次月历函数即可,
月历的主要算法是,基于1900年1月1日是周日,算出现在据当时是多少天,由这个天数算出星期几(除以7),找到第一天在星期里的定位后,顺序输出本月的天数即可
其中我认为比较难的是两端天数的考虑,即我算出后的星期到底是昨天还是今天还是明天,我认为还是要考虑清楚算式,内心清楚,或者调试正确也可以

basic=theCountOfLeapYear(1899)+1899*365;

这个代表的就是1900年以前的天数,即不带1900年1月1日,也就是说,这个时候算出的星期都是今天的,可以举个例子,就拿
1900年1月1日,只差一天,1%7=1,星期一,当天,没毛病以此类推

temp=theCountOfLeapYear(year-1)+(year-1)*365;

year年以前的天数,值得注意的是,还可以得出,它和basic差几天就是当天差的天数,就像1900年1月1日,只差一天。

年历

public static void theMadeOfCalendarOfYear(int year) {//调用12次月份就是一年
	for(int i=1;i<=12;i++) {
		System.out.println(i+"月的月历为:");
		System.out.println("------------------------------------");
		theMadeOfCalendar(year,i);
	}
	
}

月历就需要多考虑一些,




```java

```java
```java
public static void theMadeOfCalendar(int year,int month) {//以此为标准,1900年1月1日是周一
		int temp,basic,week;
		int[] weeks={1,2,3,4,5,6,0};//一周,因为,123对应周一周二周三好理解,则周日为0
		temp=theCountOfLeapYear(year-1)+(year-1)*365;//多出来的天数
		int[] monthNormol = {31,28,31,30,31,30,31,31,30,31,30,31};//12个月分别的天数,用数组存储直接调用!不是一个一个减去!!
		if(isLeapYear(year))
			monthNormol[1]=29;				//一年只有一个二月,直接赋值即可,不需选择,判断2月的天数
			
		for(int i=month-2;i>=0;i--) {
			temp+=monthNormol[i];
		}

		basic=theCountOfLeapYear(1899)+1899*365;
		week=(temp-basic+1)%7;
		System.out.print(String.format("%5s","Mon"));
		System.out.print(String.format("%5s","Tue"));
		System.out.print(String.format("%5s","Wed"));
		System.out.print(String.format("%5s","Thu"));
		System.out.print(String.format("%5s","Fri"));
		System.out.print(String.format("%5s","Sat"));
		System.out.print(String.format("%5s","Sun"));
		System.out.println();
//		System.out.print(week);
		for(int j=0;j<=6;j++) {
				if(weeks[j]==week) {//找准开始的那一天
					for(int m=1;m<=monthNormol[month-1];m++) {						
						System.out.print(String.format("%5s",m));
						j++;
						if(j==7) {
							System.out.println();//顺序输出,遇到周日,输出完成后换行,所以是j=7而j=6
							j=0;
						}
					}
					j=7;			//为了跳出循环
				}else System.out.print(String.format("%5s","**"));
		
		
		}
		System.out.println();
}

请多多指正,感激不尽

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值