通用万年历实验

通用万年历实验

说在前头

好久没写博客了,感觉自己的能力退化了很多。这次老师布置了万年历的实验,就刚好借此机会来水一篇博客吧。。

实验内容

给定某年某月某日是星期几,能给出任何一年(12月)的输出。输出效果如下:

一月二月三月
四月五月六月
七月八月九月
十月十一月十二月

(这个表格,似乎没有达到想要的效果)

实验目的

掌握对类的应用,学会运用面向对象的知识完成万年历的打印。(乱写的,这不重要,重要的在后面)

UML图

在这里插入图片描述
(UML图还不太会自己画,之后我会补上来QwQ,这里先这么凑合着,不好意思力嘤嘤嘤)

代码

(最喜欢的部分来了!!!)
Main.java

import java.util.Calendar;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Cld cld = new Cld();
        int year;
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入年份:");
        year = scanner.nextInt();
        String[][] a =new String[12][42];//因为要输出一年的日历,所以设置了12个月,每个月预留6*7=42个位置


        for(int i = 0;i<12;i++){
            cld.setDemo(year,i+1);
            a[i]=cld.getCalendar();
        }
        char[] str = "日 一 二 三 四 五 六".toCharArray();
        for(int i = 0 ;i<4;i++){
            for(int k = 0;k<3;k++){
                for(char c:str){
                    System.out.printf("%3c",c);
                }
                System.out.print("    ");
            }
            System.out.println();
            for(int j = 0 ;j<6;j++){
                for(int m = 0 ; m<3;m++){
                    for(int n = 0;n<7;n++){
                        System.out.printf("%6s",a[i*3+m][j*7+n]);//i*3+m表示当前月份,j*7+n表示当前日期,不用多解释了吧?
                    }
                    System.out.printf("   ");
                }
                System.out.println();
            }
        }


    }
}

Cld.java

//这个类用来设置日历

import java.util.Calendar;

public class Cld {
    String[] Day;
    int year,month;
    void setDemo(int year, int month){//从主类获取年月信息
        this.year = year;
        this.month = month;
    }
    public String[] getCalendar() {//设置月历
        String[] a = new String[42];
        Calendar cal = Calendar.getInstance();
        cal.set(year,month-1,1);
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1;
        int day = 0;
		//下面这段冗长的部分就是判断每个月的天数,,但我觉得太长了,可以短一点的,(确实)
        if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12){
            day = 31;
        }
        else if(month == 4||month == 6||month == 9||month == 11){
            day = 30;
        }
        else if(month == 2){
            if(((year % 4 == 0)&&(year % 100 != 0))||(year % 400 == 0)){
                day = 29;
            }
            else {
                day = 28;
            }
        }
        for (int i=0;i<dayOfWeek;i++)a[i]="";
        for(int i=dayOfWeek,n=1;i<day+dayOfWeek;i++) {
            a[i] = String.valueOf(n);
            n++;
        }
        for(int i = dayOfWeek+day;i<a.length;i++)
        {
            a[i]="";
        }
        return a;


    }

}

运行结果

输入年份为2021的结果:
输入年份为2021时的结果
输入年份为1999的结果:输入年份为1999的结果

实验总结/实验心得

实验结束,难度感觉不是特别大,只需要处理好每个月的日历信息以及在打印时的数组关系就行了。(虽然完成的还是很粗糙)通过实验,我对Java面向对象的相关内容有了一定的了解,并有所巩固,加强了问题分析与编程的能力。

好久没写博客了,,感觉好多东西都忘了,嘛。。从头再来,期待共同成长吧,耶比耶比~~~~~

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值