JAVA实现万年历

package test;
/*
 * 输出万年历
 * 设定1900.01.01为起点
	1970~1979
	1970 4 
	1971 5
	1972 0
	1973 1
	1974 2
	1975 3
	1976 5
	1977 6
	1978 0
	1979 1
 */
import java.util.Scanner;
public class PermanentCalendar {
	static boolean LeapYear(int year){ //判断闰年
		if(year%400==0 || (year%4==0 && year%100!=0)){ //是闰年
			return true; 
		}
		
		else{
			return false;
		}
	}
	static final int N = 1900; //用N表示起始年份
	public static void main(String[] args){
		int n = 1;//1900年1月1日 是星期一
		int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //用来存储月份的天数
		int year[] = new int[1001];  //用来存储每年1月1日是星期几
		year[0] = n;
		for(int i=1;i<year.length;i++){
			int days = 365;
			if(LeapYear(i+N-1)){//如果它的前一年是闰年则需要加366
				days = 366;
				year[i] = (year[i-1] + days)%7;
			}
			else{
				year[i] = (year[i-1] + days)%7;
			}
		}
		/*
		for(int i=0;i<10;i++){
			System.out.println(year[i]);
		}
		*/
		int Month ,Year;
		Scanner in = new Scanner(System.in);
		System.out.println("请输入年份在(1900~2900之间):");
		Year = in.nextInt();
		if(Year>2900 || Year<1900){
			System.out.println("输入年份不合法,请重新输入!");
			return;
		}
		//System.out.println(year[Year-1970]);
		System.out.println("请输入月份(1~12之间):");
		Month = in.nextInt();
		if(Month>12 || Month<1){
			System.out.println("输入月份不合法,请重新输入!");
			return;
		}
		System.out.println("星期日     " +"星期一     "+"星期二    "+"星期三     "+"星期四     "+"星期五     "+"星期六   ");
		System.out.println();
		if(LeapYear(Year)){ //如果是闰年,2月改为29号
			month[2] = 29;
		}
		int day=0; //用来记录当前月的一号是今年的第几天
		for(int i=1;i<Month;i++){
			day = day + month[i];
		}
		
		day = (year[Year-N]+day)%7;
		for(int i=0;i<7;i++){//输出控制
			if(day == i){
				System.out.print("  " + 1 + "   ");
				if(day == 6){
					System.out.println();
				}
				break;
			}
			else{
				System.out.print("      ");
			}
		}
		for(int i=2;i<=month[Month];i++){
			if(i<10){
				System.out.print("  " + i + "   ");
			}
			else{
				System.out.print(" " + i + "   ");
			}
			if((day+i-1)%7 == 6){
				System.out.println();
			}
		}
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值