栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

新的一年学会时间管理:一个能计算具体日期是星期几的“人工智能”(Java实现+只调用Scanner类+编译器控制台输出展示)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

新的一年学会时间管理:一个能计算具体日期是星期几的“人工智能”(Java实现+只调用Scanner类+编译器控制台输出展示)

文章目录
    • 1、动机
    • 2、实现结果
    • 3、Java代码实现
    • 4、结语

1、动机

  2022年的第一篇博客,感谢c站,见证了我上一年的成长!我们言归正传,在推算日期之前首先要有一个基准,这个基准你可以随便选择。我选择了2019年的元旦(这个可以自己定义,如果变动可能需要适当修改代码)。

比方说:

  接着通过算法整体的框架,可以向前或向后推算出我们输入的目标年月日对应的具体日期。
  整体代码框架首先判断是否是平年,还是闰年。我在主函数外定义了两个数组,分别对应每一个月份的天数。然后在这个两个模块内,又分别定义三个模块:利用if、else if 和else区分,分别代表输入2019年的(例如2019年7月1日),2019年以后(例如2025年5月1日)及2019年之前(例如2000年6月1日)的年份。由于我们知道2019年元旦是星期几,又接着我们获得了月份差,进而获得天数差(相对于2019年元旦)。那么在这时就可以以一周为单位,对天数求余数(mod 7),进行推算。最终我们输出结果。(下文代码中,我写有注释,易懂)

  实验准备:定义一个DateCalculatorAI类直接在java的主流编译器(eclipse等)跑代码就行。

2、实现结果


3、Java代码实现
import java.util.Scanner;

public class DateCalculatorAI {

	public DateCalculatorAI() {
		// TODO Auto-generated constructor stub
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 地球绕太阳公转一周叫做一回归年,一回归年长365日5时48分46秒。因此,公历规定有平年和闰年,平年一年有365日,
		// 比回归年短0.2422日,四年共短0.9688 日,故每四年增加一日,这一年有366日,就是闰年。但四年增加一日比四个回归年又多0.0312日,
		// 400年后将多3.12日,故在400年中少设3个闰年,也就是在400年中只设97个闰年,这样公历年的平均长度与回归年就相近似了。
		System.out.print("已知2019年是一个平年,它有365天。");
		System.out.println("2019年的元旦是星期二。");
		System.out.println("欢迎进入计算日期的人工智能!");
		System.out.println("——————————————————————Begin——————————————————————");	

		int[] noleapYear = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		int[] leapYear = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		int times = 0;
		String next = "Y";
		Scanner scan = new Scanner(System.in);
		do {
			int x = 0;
			int y = 0;
			int z = 0;
			int a = 0;
			int b = 0;
			int c = 0;
			int k = 0;
			int day = 0;
			
			times++;
			System.out.println("------------------------"+times+"------------------------");

			System.out.println("请你输入年份:");
			x = scan.nextInt();
			if (((x % 100 == 0) && (x % 400 != 0)) || ((x % 100 != 0) && (x % 4 != 0))) {
				System.out.println("您要查询的" + x + "年是一个平年");
				System.out.println("请你输入月份");
				y = scan.nextInt();
				System.out.println("您想要查找的是" + x + "年" + y + "月");
				System.out.println("请输入你想查找的具体日期:");
				scan = new Scanner(System.in);
				z = scan.nextInt();
				a = x - 2019;// a是年份之差
				if (a == 0) {
					c = y - 1;// c是月份之差
					b = z - 1;// b是日期之差
					if (c > 0) {
						day = noleapYear[0];
						for (int i = 1; i <= c - 1; i++) {
							day += noleapYear[i];
						}
						k = (day + b) % 7;
					} else
						k = b % 7;
					System.out.print(">>输出:");
					switch (k) {
					
					case (0):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期二。");
						break;
					case (1):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期三。");
						break;
					case (2):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期四。");
						break;
					case (3):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期五。");
						break;
					case (4):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期六。");
						break;
					case (5):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期日。");
						break;
					case (6):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期一。");
						break;
					}
					System.out.println("请问您是否还想查询一次日期?");
					System.out.println("是的话请输入Y/y,否则按任意键退出程序,谢谢。");
					scan = new Scanner(System.in);
					next = scan.nextLine();
				} else if (a > 0) {
					day = 365 * a;

					for (int j = 2019; j < x; j++) {
						while (!(((j % 100 == 0) && (j % 400 != 0)) || ((j % 100 != 0) && (j % 4 != 0)))) {
							day += 1;
							break;// 没有加break的话会使循环崩溃
						}
					}
					c = y - 1;// c是月份之差
					b = z - 1;// b是日期之差

					if (c > 0) {
						for (int i = 0; i < c; i++) {
							day += noleapYear[i];
						}
						k = (day + b) % 7;
					} else
						k = (day + b) % 7;
					System.out.print(">>输出:");
					switch (k) {
					case (0):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期二。");
						break;
					case (1):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期三。");
						break;
					case (2):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期四。");
						break;
					case (3):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期五。");
						break;
					case (4):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期六。");
						break;
					case (5):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期日。");
						break;
					case (6):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期一。");
						break;
					}
					System.out.println("请问您是否还想查询一次日期?");
					System.out.println("是的话请输入Y/y,否则按任意键退出程序,谢谢。");
					scan = new Scanner(System.in);
					next = scan.nextLine();
				} else {
					a = Math.abs(a) - 1;
					day = 365 * a;
					for (int j = x; j < 2019; j++) {
						while (!(((j % 100 == 0) && (j % 400 != 0)) || ((j % 100 != 0) && (j % 4 != 0)))) {
							day += 1;
							break;
						}
					}
					c = y - 1;// c是月份之差
					b = noleapYear[y - 1] - z + 1;// b是日期之差

					for (int i = 11; y - 1 < i; i--) {// 不知道会不会有误差在此处
						day += noleapYear[i];
					}
					k = (day + b) % 7;
					System.out.print(">>输出:");
					switch (k) {
					case (0):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期二。");
						break;
					case (1):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期一。");
						break;
					case (2):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期日。");
						break;
					case (3):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期六。");
						break;
					case (4):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期五。");
						break;
					case (5):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期四。");
						break;
					case (6):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期三。");
						break;
					}
					System.out.println("请问您是否还想查询一次日期?");
					System.out.println("是的话请输入Y/y,否则按任意键退出程序,谢谢。");
				    scan = new Scanner(System.in);
					next = scan.nextLine();
				}
			} else {
				System.out.println("您要查询的" + x + "年是一个闰年");
				System.out.println("请你输入月份:");
				scan = new Scanner(System.in);
				y = scan.nextInt();
				System.out.println("您想要查找的是" + x + "年" + y + "月");
				System.out.println("请输入你想查找的具体日期:");
				z = scan.nextInt();
				a = x - 2019;// a是年份之差
				if (a == 0) {
					c = y - 1;// c是月份之差
					b = z - 1;// b是日期之差
					if (c > 0) {
						for (int i = 0; i < y - 1; i++) {
							day += leapYear[i];
						}
						k = (day + b) % 7;
					} else
						k = b % 7;
					System.out.print(">>输出:");
					switch (k) {
					case (0):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期二。");
						break;
					case (1):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期三。");
						break;
					case (2):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期四。");
						break;
					case (3):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期五。");
						break;
					case (4):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期六。");
						break;
					case (5):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期日。");
						break;
					case (6):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期一。");
						break;
					}
					System.out.println("请问您是否还想查询一次日期?");
					System.out.println("是的话请输入Y/y,否则按任意键退出程序,谢谢。");
					scan = new Scanner(System.in);
					next = scan.nextLine();
				} else if (a > 0) {
					day = 365 * a;
					for (int j = 2019; j < x; j++) {
						while (!(((j % 100 == 0) && (j % 400 != 0)) || ((j % 100 != 0) && (j % 4 != 0)))) {
							day += 1;
							break;
						}
					}
					c = y - 1;// c是月份之差
					b = z - 1;// b是日期之差
					if (c > 0) {
						for (int i = 0; i < y - 1; i++) {
							day += leapYear[i];
						}
						k = (day + b) % 7;
					} else
						k = (day + b) % 7;
					System.out.print(">>输出:");
					switch (k) {
					case (0):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期二。");
						break;
					case (1):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期三。");
						break;
					case (2):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期四。");
						break;
					case (3):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期五。");
						break;
					case (4):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期六。");
						break;
					case (5):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期日。");
						break;
					case (6):
						System.out.println(x + "年" + y + "月" + z + "日" + "是星期一。");
						break;
					}
					System.out.println("请问您是否还想查询一次日期?");
					System.out.println("是的话请输入Y/y,否则按任意键退出程序,谢谢。");
					scan = new Scanner(System.in);
					next = scan.nextLine();
				} else {
					a = Math.abs(a) - 1;
					day = 365 * a;
					if (a == 0) {
						b = leapYear[y - 1] - z + 1;// b是日期之差
						for (int i = 11; y - 1 < i; i--) {
							day += leapYear[i];
						}
						k = (day + b) % 7;
						System.out.print(">>输出:");
						switch (k) {
						case (0):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期二。");
							break;
						case (1):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期一。");
							break;
						case (2):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期日。");
							break;
						case (3):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期六。");
							break;
						case (4):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期五。");
							break;
						case (5):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期四。");
							break;
						case (6):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期三。");
							break;
						}
						System.out.println("请问您是否还想查询一次日期?");
						System.out.println("是的话请输入Y/y,否则按任意键退出程序,谢谢。");
						scan = new Scanner(System.in);
						next = scan.nextLine();
					} else {
						for (int j = 2019; x < j; j--) {
							while (!(((j % 100 == 0) && (j % 400 != 0)) || ((j % 100 != 0) && (j % 4 != 0)))) {
								day += 1;
								break;
							}
						}
						b = leapYear[y - 1] - z + 1;// b是日期之差
						for (int i = 11; y - 1 < i; i--) {
							day += leapYear[i];
						}
						k = (day + b) % 7;
						System.out.print(">>输出:");
						switch (k) {
						case (0):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期二。");
							break;
						case (1):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期一。");
							break;
						case (2):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期日。");
							break;
						case (3):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期六。");
							break;
						case (4):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期五。");
							break;
						case (5):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期四。");
							break;
						case (6):
							System.out.println(x + "年" + y + "月" + z + "日" + "是星期三。");
							break;
						}
						System.out.println("请问您是否还想查询一次日期?");
						System.out.println("是的话请输入Y/y,否则按任意键退出程序,谢谢。");
						scan = new Scanner(System.in);
						next = scan.nextLine();
					}	
				}
			}
			
		} while (next.equalsIgnoreCase("Y"));
		System.out.println("——————————————————————End——————————————————————");
		System.out.println("您已经退出查询日期系统,欢迎下次使用!");
		scan.close();
	}
}
4、结语

  这份代码是在19年6月份和她在的图书馆第一次完成,我记得从晚上七点一直写到了图书馆闭馆。而如今我已大四,过去的往事如风远去,但点点滴滴犹记我心。(下图摄于2021年12月28日)

  这篇博文,我趁着毕设开题前整理出来,代码已检查,如仍有错误还请指正。
  原创不易,觉得不错的话,请给博主一键三连吧,你的支持是我创作的最大动力!如需转载,请联系博主。
  祝愿你我在新的一年都学有所成,一切顺利!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694721.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号