Java 制作 日历 Calendar(for、if、静态空间)_java calendar写日历-CSDN博客

先看最后结果:

分析:

开头用 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
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论