java代码实现万年历

java编程需要的是思考的过程,且行且珍惜

1:计算出当前日期距离原点的天数
2:年份计算完了,现在来计算月份吧
3:判断要查询的月一号是周几
4:开始进行打印展示
5:然后在加上一些符合生活逻辑的限制条件
首先我们需要写一个需求时,第一步肯定是要分析怎么去实现
		万年历
			以1900年1月1号星期一为时间原点
			1:计算出当前日期距离原点的天数(例:2019/5/21)
	//用循环来算出2019年之前距离原点一共有多少天
	for (int i = 1900; i < year; i++) {
		//a是一年的总天数
		a = isRun(i);
		//b是要查询的年之前所有年的天数总和
		b = b + a;
	}
	
	//判断是否为闰年
	public static int isRun(int year) {
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
			return 366;
		}
		return 365;
	}
			2 年份计算完了,现在来计算月份吧
	for (int i = 1; i < month; i++) {
		c = monthDay(i, year);
		b = b + c;
	}

	//判断每个月有几天
	public static int monthDay(int month,int year) {
		int a = 0;
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			a = 31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			a = 30;
			break;
		case 2:
			if (isRun(year) == 365) {
				a = 28;
				break;
			} else if (isRun(year) == 366) {
				a = 29;
				break;
			}
		}
		return a;
	}
	3判断要查询的月一号是周几
	//加一表示下个月一号为周几
	d = (b + 1) % 7;
4开始进行打印展示
//打印表头
	System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
		//每月的1号之前的空格
	for (int i = 0; i < d; i++) {
		System.out.print("\t");
	}
				
	//c为当月天数
	for (int i = 1; i <= (c = monthDay(month, year)); i++) {
		System.out.print(i + "\t");
					
	//到周日换行
		if((d + i) % 7 == 0) {
			System.out.println();
		}
	}

5:然后在加上一些符合生活逻辑的限制条件就可以了 例如月份只能是1到12;这里就不在进行详细说明了

完整的具体代码如下:

public class Demo01 {
	public static void main(String[] args) {
		//输入查询的年月
		Scanner sc = new Scanner(System.in);
		System.out.println("请选择查询的年份 1900-2099");
		int year = sc.nextInt();
		sc.nextLine();
		System.out.println("请选择查询的月份");
		int month = sc.nextInt();
		sc.nextLine();

		//今年的天数
		int a = 0;
		//离1900年的年份天数和 后面加上月份天数和
		int b = 0;
		//今年的月份天数
		int c = 0;
		//算出来要查寻的一号是周几
		int d = 0;
		//判断年份是否合法
		if (year >= 1900 && year <= 2099) {
			//判断月份是否合法
			if (month >= 1 && month <= 12) {
				//求要查寻的年份离1900.1.1有多少天
				for (int i = 1900; i < year; i++) {
					a = isRun(i);
					b = b + a;
				}
				//加上之前月份总计多少天
				for (int i = 1; i < month; i++) {
					c = monthDay(i, year);
					b = b + c;
				}
				//加一表示下个月一号为周几
				d = (b + 1) % 7;
				
				//打印表头
				System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
				//每月的1号之前的空格
				for (int i = 0; i < d; i++) {
					System.out.print("\t");
				}
				
				//c为当月天数
				for (int i = 1; i <= (c = monthDay(month, year)); i++) {
					System.out.print(i + "\t");
					
					//到周日换行
					if((d + i) % 7 == 0) {
						System.out.println();
					}
				}

			} else {
				System.out.println("输入月份有问题;请重新输入");
				System.out.println("请选择查询的月份");
				month = sc.nextInt();
				sc.nextLine();
			}
		} else {
			System.out.println("输入年份超限,请重新输入,范围为1900到2099年");
			System.out.println("请选择查询的年份 1900-2099");
			year = sc.nextInt();
			sc.nextLine();
		}
	}
	
	
	//判断是否为闰年
	public static int isRun(int year) {
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
			return 366;
		}
		return 365;
	}

	
	//判断每个月有几天
	public static int monthDay(int month,int year) {
		int a = 0;
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			a = 31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			a = 30;
			break;
		case 2:
			if (isRun(year) == 365) {
				a = 28;
				break;
			} else if (isRun(year) == 366) {
				a = 29;
				break;
			}
		}
		return a;
	}
}

感谢观看到最后,希望对你有所帮助,成长的道路需要我们自己去努力;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值