开头用 Scanner 交互以及接收变量值:
日历的 Head 像 Sun 什么的在一行静态空间里打印,顶部和底部也可以用一个静态空间打印,等会调用就行了
private static void Head(){ System.out.println(" Sun Mon Tue Wed Thu Fri Sat "); }private static void Top_Bottom(){ System.out.print("+------+------+------+------+------+------+------+\n"); }
然后就是重点部分日历日期的实现了,它可以分为第一个星期天在1号和2~6号这两种情况来讨论
即 使用 if 条件语句来实现
先看特殊情况 第一个星期天日期(date_firSunday)== 1 :
if(date_firSunday == 1) { for(int i = 1;i <= number_of_day;i += 7) { //保证日历一行7个,且不会有多余的空行 for(int date = i;date < (i+7);date++) { //输出7个日期 if(date < 10) { //注意:10以及之后的数字会占用两个空间,所以也要用 if 语句来讨论。 System.out.print("| "+date+" "); } else if(date <= number_of_day){ //控制输出日期不超过当月日期 System.out.print("| "+date+" ");} else { System.out.print("| ");//输出尾部空格 } } System.out.print("|\n"); //封口+换行, 日历一行结束,(一次循环结束) } } // 日历主体部分输出完毕
接下来按照相似的思路讨论一般的情况(星期日日期在2~6号):
else if(date_firSunday < 7) { for(int j = 1;j <= (number_of_day+8-date_firSunday);j += 7) {// 保证日历一行7个,且不会有多余的空行 for(int Date = j;Date < (j+7);Date++ ) { //保证输出7个值(与特殊情况要区分!) int Date_2=Date+date_firSunday-8; // 保证输出正确的起始日期 if(Date <= 8-date_firSunday){ //输出前方空白段 System.out.print("| "); } else{if(Date_2 < 10) { // 10以内的日期输出 System.out.print("| "+Date_2+" "); } else if(Date_2 <= number_of_day){ // 10以外的日期输出 System.out.print("| "+Date_2+" ");} else { System.out.print("| "); // 输出尾部空白日期 } } } System.out.print("|\n"); // 封口加换行, 日历一行结束,一次循环结束。 } } // 大循环结束,日历主体部分完成!
结果如下:
完整结构如下:
package first_class_study;import java.util.Scanner;public class Calendar { public static void main(String[] args) { Get_inform(); // 日历制作开始} private static void Get_inform(){} //制作日历的程序写在这一个里,方便调用 private static void Print_for(int number_of_day,int date_firSunday){} //画主体 private static void Head(){} //画上方星期几 private static void Top_Bottom(){} //画首尾封口 }
完整代码如下:
package first_class_study; import java.util.Scanner; public class Calendar { public static void main(String[] args) { Get_inform(); // 日历制作开始 } private static void Get_inform() { Scanner scan = new Scanner (System.in); System.out.println("这个月有多少天?"); int Number_of_day = scan.nextInt(); Scanner scan2 = new Scanner (System.in); System.out.println("这个月第一个星期天是几号?"); int Date_firSunday = scan.nextInt(); if((Number_of_day <= 31) && (Number_of_day >= 28) && (0< Date_firSunday) && (7 > Date_firSunday)) { Head(); Top_Bottom(); Print_for(Number_of_day,Date_firSunday); Top_Bottom(); }else { System.out.println("请按要求输入哦!"); } } private static void Print_for(int number_of_day,int date_firSunday){ if(date_firSunday == 1) { for(int i = 1;i <= number_of_day;i += 7) { // 保证日历一行7个,且不会有多余的空行 for(int date = i;date < (i+7);date++) { //输出7个日期 if(date < 10) { //注意:10以及之后的数字会占用两个空间,所以也要用 if 语句来讨论。 System.out.print("| "+date+" "); } else if(date <= number_of_day){ //控制输出日期不超过当月日期 System.out.print("| "+date+" ");} else { System.out.print("| ");//输出尾部空格 } } System.out.print("|\n"); //封口+换行, 日历一行结束,(一次循环结束) } } // 日历主体部分输出完毕 else if(date_firSunday < 7) { for(int j = 1;j <= (number_of_day+8-date_firSunday);j += 7) {// 保证日历一行7个,且不会有多余的空行 for(int Date = j;Date < (j+7);Date++ ) { //保证输出7个值(与特殊情况要区分!) int Date_2=Date+date_firSunday-8; // 保证输出正确的起始日期 if(Date <= 8-date_firSunday){ //输出前方空白段 System.out.print("| "); } else{if(Date_2 < 10) { // 10以内的日期输出 System.out.print("| "+Date_2+" "); } else if(Date_2 <= number_of_day){ // 10以外的日期输出 System.out.print("| "+Date_2+" ");} else { System.out.print("| "); // 输出尾部空白日期 } } } System.out.print("|\n"); // 封口加换行, 日历一行结束,一次循环结束。 } } // 大循环结束,日历主体部分完成! } private static void Head(){ System.out.println(" Sun Mon Tue Wed Thu Fri Sat "); } private static void Top_Bottom(){ System.out.print("+------+------+------+------+------+------+------+\n"); } }
总结:
1.问题先拆分为一个个小问题,再一步步解决,可以先构建好框架
2.尽量按照数据间的联系来设置条件,这样代码会更灵活可变
3.多尝试,多吸取意见(原本我以为日历多出一行没关系)
最后皮一下:
for(;;) { Get_inform(); } // 日历制作开始
这行无限循环的代码可以实现的,它会一直问你要数据(放心,不用担心卡死),表现如下:
希望能对你有所启发!
原网址: 访问
创建于: 2024-01-03 12:43:38
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
最新评论