博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java循环小游戏(任意月份日历表)
阅读量:6221 次
发布时间:2019-06-21

本文共 3656 字,大约阅读时间需要 12 分钟。

题目: 输出任意年份任意月份的日历表(公元后)

显示效果:

  1. 思路:
    1. 判断1年1月1日是星期几,1 % 7 = 1 对应的是1年1月1日的星期数,2 % 7 = 2对应的是1年1月2日的星期数,以此类推;
    2. 计算(当年以前所有天数+当年当月1号之前所有天数);
    3. 年份分平年闰年,平年365天,闰年366天;
    4. 闰年的判断方法year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)若为真,则为闰年否则为平年;
    5. 定义平年/闰年数组,包含各月天数;
    6. 遍历数组求和,计算当年当月前总天数;
    7. (当年以前所有天数+当年当月前总天数+1)即为1年1月1日到当年当月1日的总天数;
    8. 总天数对7取模,根据结果判断当月1号是星期几,输出空白区域;
    9. 输出当月日历表,逢星期六换行
  2. 代码1:判断1年1月1日是星期几
/*题目:已知2016年1月1日是星期五,判断0001年1月1日是星期几思路:	1.算出0001年1月1日到2016年1月1日共几天	2.然后用天数对7取模,判断星期几*/class JudgeZero {	public static void main(String[] args) {		int totalDay = (((2016 - 1) / 4 * 366) + (2016 - 1 - ((2016-1) / 4)) * 365) + 1;		int zeroWeek = 1 % 7 - (totalDay % 7 - 5);		switch (zeroWeek) {		case 1 :			System.out.println("0001年1月1日是星期一");			break;		case 2 :			System.out.println("0001年1月1日是星期二");			break;		case 3 :			System.out.println("0001年1月1日是星期三");			break;		case 4 :			System.out.println("0001年1月1日是星期四");			break;		case 5 :			System.out.println("0001年1月1日是星期五");			break;		case 6 :			System.out.println("0001年1月1日是星期六");			break;		case 0 :			System.out.println("0001年1月1日是星期日");			break;		default :			System.out.println("输入错误!");		}						}}复制代码
  1. 输出结果:

  2. 代码2:输出日历表

import java.util.Scanner;class FindMonthList {	public static void main(String[] args){		Scanner sc = new Scanner(System.in);		System.out.println("请输入年份:");		int year = sc.nextInt();			//年份		if (year < 1) {						//判断非法输入年份			System.out.println("输入错误!");			return;		}		System.out.println("请输入月份:");		int month = sc.nextInt();			//月份		if (month < 1 || month > 12) {		//判断非法输入月份			System.out.println("输入错误!");			return;		}		//输出表头		System.out.println("-------" + year + " 年 " + month + " 月 " + "-------");		System.out.println();		System.out.println("日  一  二  三  四  五  六");		//计算当前年份以前所有天数beforeYearTotalDay;每4年一个闰年,闰年366天,平年365天		int beforeYearTotalDay = ((year - 1) / 4 * 366) + (year-1 - ((year - 1) / 4)) * 365;		int[] arrLeapYear = {0,31,29,31,30,31,30,31,31,30,31,30,31};	//闰年各月天数	int数组		int[] arrNormalYear = {0,31,28,31,30,31,30,31,31,30,31,30,31};	//平年各月天数	int数组		int beforeMonthTotalDay = 0;									//定义本年当月之前月份的总天数		if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {		//判断当前年份是否是闰年			for (int i = 0 ; i < month ; i ++ ) {	//for循环计算当月之前总天数				//计算当前月份之前的所有天数				beforeMonthTotalDay = beforeMonthTotalDay + arrLeapYear[i];			}			//判断当月1日是星期几			int totalDay = beforeYearTotalDay + beforeMonthTotalDay + 1;			int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1对应的是星期日			for (int i = 0 ; i < (week - 1 + 7) % 7 ; i ++) {	//如果写成i < (week-1)会出现i<-1的情况				System.out.print("    ");//输出开头空白			}			for (int i = 1 ;i <= arrLeapYear[month] ;i ++ ) {	//for循环输出各月天数				System.out.print(i + "  ");				if (i < 10 ) {		//小于10的数补一个空格,以便打印整齐					System.out.print(" ");				}				if (i % 7 == ((7-(week - 1)) % 7 ) || i == arrLeapYear[month]) {//每逢星期六/尾数换行					System.out.println();				}			}		} else {		//不是闰年就是平年			for (int i = 0 ; i < month ; i ++ ) {	//for循环计算出当月之前月份总天数				beforeMonthTotalDay = beforeMonthTotalDay + arrNormalYear[i];			}			//判断当月1日是星期几			int totalDay = beforeYearTotalDay + beforeMonthTotalDay + 1;			int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1对应的是星期日			for (int i = 0 ; i < (week - 1 + 7) % 7 ; i ++) {	//如果写成i < (week-1)会出现i<-1的情况				System.out.print("    ");//输出开头空白			}			for (int i = 1 ;i <= arrNormalYear[month] ;i ++ ) {//for循环输出各月天数				System.out.print(i + "  ");				if (i < 10 ) {			//小于10的数补一个空格,以便打印整齐					System.out.print(" ");				}				if (i % 7 == ((7-(week - 1)) % 7 ) || i == arrNormalYear[month]) {//每逢星期六/尾数换行					System.out.println();				}			}		}	}}复制代码
  1. 输出结果:
  2. 总结:
  • 代码还很臃肿,需要继续优化;
  • 对于数组的理解还很浅显,下一步学习数组定义,用一个数组解决平闰年的问题;
  • 类名、变量名命名不规范,意思不易理解。

转载于:https://juejin.im/post/5a34e6c06fb9a0450f22024e

你可能感兴趣的文章
我的友情链接
查看>>
百度8秒君:文件存网盘真的靠谱么?
查看>>
TCP/IP参考模型
查看>>
linux基础_根文件系统
查看>>
一个奇葩常见的问题 nginx 403 forbidden错误
查看>>
Hibernate查询方式汇总
查看>>
hpux filecache问题
查看>>
下一代太阳自适应光学技术让太空“天气预报”更精准
查看>>
气象与情绪有何联系?低温天气比恐袭更容易令人抑郁
查看>>
使用Jmeter对mysql进行性能测试入门
查看>>
用java在图片上写字
查看>>
spring的成功配置样式
查看>>
spring注解之 @profile
查看>>
Linux 重定向以及管道讲解
查看>>
Myeclipse debug 调试模式
查看>>
exchange IE登录提示http 500 内部服务器错误
查看>>
eclipse中怎么找到编译后的class路径
查看>>
linux下配置文件的读写
查看>>
如何配置IP寻址
查看>>
Veeam Backup & Replication 6.0 XX版安装
查看>>