第二次
1:前言
第四次作业是前六次作业里面题目量最少的一次,但也是前六次作业里面最难的一次,虽然只有三题,说来惭愧,我只写出来了一题半,大部分人也跟我一样,因为第一题实在太难了,即使我一直在看正则最后还是没有写出来。第四次作业第二题的话,写出来了一半,主类出现了一点问题,但其他类功能已经基本实现了,如Day类中的日期复位,日期改为月最大值,检验数据合法性,日期加一,日期减一等功能已经实现了,还有DateUtil类以及Month类Year类都已经基本实现了,但由于花费太多时间在第一题正则上面,导致后面时间不够,最后在主类中出现问题,导致没有得到满分。第四次作业第三题是第四次作业的最后一题,虽然是最后一题但是并不是很难,对于段老师来说基本上就是送分题吧,所以分数占比只有15%,但是也使用了extends继承方法来提高代码质量。
第五次作业题目相对于第四次作业难度下降了一些,但还是很难, 第五次作业有六道题目,题目量相对多了一点,但难度相对于第四次作业下降了一些,第一题是找出最长的单词,输入几个单词找出最长的单词,要求不同长度单词只出现一次,这里要用到对于字符串操作的方法xx.split(" ")以空格分隔单词,然后把他们放入一个数组中,每个单词放入一个数组,最后遍历一遍,比较它们的长度,再输出最长的那个单词。第二题是第五次作业最简单的题目,主要在于输入前后对于一个个数组位置的放置,其次是对于把两个数组数据放入一个数组里面,再对这个新数组使用冒泡排序法,组成一个从小到大的排序完成了的数组,再遍历输出这个数组。第五次作业第三题也不算难,主要在于插入排序,冒泡排序,选择排序的构建,就算不会百度搜一下,自己琢磨一下基本就完成了,这道题目也算简单。至于第五次作业第四题正则表达式的,我花了很长时间看正则资料,又花了挺长时间编代码,但最后还是没写出来,至于第五题,与第四次作业第二题很像,但是老师说不能直接copy,所以自己又写了一次,最后还是败在了主类上面,主类总是出问题,再加上第四题正则还花了很长时间,所以又没得到满分。
第六次作业题目量变成了六道,虽然题目量增加了但是难度下降了一些,第一题也算简单,虽然是正则,但终于算是简单了一回,QQ号的检验,使用的是最基础的正则检验,Pattern p = Pattern.compile(" 输入匹配的模式 ");,然后再加上Matcher m = p.matcher(a); a为输入的字符串,然后再加上if(m.matches()); 来自动判断输入的QQ号是否合理。第六次作业的第二题是对于字符串的排序,先使用StringBuilder z = new StringBuilder()创建一个空间,然后再用char.At(i)一个个吧输入的字符遍历出来并存在声明好的数组x[ ]中,然后使用Arrays.sort(x);对x[ ] 中数据自动从小到大排序,然后再使用z.append(x[i]);一个个遍历放进z空间中,再使用String zz = z.toString(); 再返回此数组以字符串的返回形式。第六次作业第三题又是一个正则,有关于验证码的校验,相比于第一题难度加大了很多,但是基本结构没有改变但是匹配方式改变了,基本上不存在问题。第六次作业的第四题,还是正则的训练,有关于学号的校验,基本结构与第一题,第三题的差别不大,但是匹配难度则大了很多要使用Pattern p =Pattern.compile("2020([1][1-7]|[6][1]|[7][1-3]|[8][1-2])([0-3][1-9]|[4][0])");来匹配相应的学号检验。第六次作业的第五题是第六次作业里面最难的题目了,花了一天多时间才写出来,首先要用到抽象类的和抽象方法,然后要用到继承,Rectangle Circle Triangle 都要继承自Shape类,并且都要实例化抽象方法,并且判断数据是否合理,主要的难度在于主类的构建,对于主类来说,难度最大的地方在于错误数据的输出和非错误数据输出的问题,有时候是错误数据还是会输出后面正常数据的答案输出。还要使用到ArrayList<Double> xx = new ArrayList<Double>();,<>里面的是数据类型,可以是double也可以是String,然后再使用 xx.add(circle.getArea());等把数据存入,然后再使用Collections.sort(xx); 来对xx中的数据进行排序,最后再输出xx中的数据,用xx.get(i);来得到xx中的数据并输出。至于所有面积之和的方法放哪里,我是放在主类里面,在主方法中直接调用算面积之和的方法。第六次作业的第六题其实非常简单,不知道为什么放在最后一题,稍微了解一下接口的定义与性质就能完成这道题目了,interface定义接口类,接口类中的方法必须是抽象方法,并且其中的方法要被其他类实例化,不能在接口类中实例化抽象方法,而实例化抽象方法必须使用implements+接口类来实例化接口类中的抽像方法,其他地方基本没什么了,主要就是对于接口的熟悉与简单应用。
2:设计与分析
对于第四次作业第三题




这题主要在于对于Shape类中抽象方法的覆写,然后在Shape的继承类中用super.方法名 来调用父类方法,获得父类私有的变量等等,如果子类没有覆写的方法可以直接用 方法名调用,
对于第五次作业第五题:



第五题主要在于DateUtil类的构建,主要功能都在这个类中实现,对于得到下n天的功能,先要判断是否是闰年,然后在判断当前日期+天数是否会超过这个月的天数,如果不会则直接相加,反之,则用while循环来判断下n天的日期,一个月一个月,一年一年遍历过去。之后就是把新得到的数据载入DateUtil中,重新定义年月日的日期。再就是判断两个日期相差的天数,先判断两个日期相差的年数,并判断两个日期相差年数中有几个闰年,然后在判断两个日期相差的月数-1,然后再判断两个日期相差的天数,再用365*相差的年数+两个日期年数中闰年的数量+两个日期中月份相差的天数+两个日期相差的天数,最后就得到了两个日期天数的差值。圈复杂度主要是在对于数合理性的判断和对于求下n天上使用了过多的if else 语句,导致圈复杂度达到了18点,可以使用switch语句来减少圈复杂度。
对于第六次作业第五题:




这题主要是主类的难度,像Shape类和Shape类的继承,要用到ArrayList<Double> xx = new ArrayList<Double>();来获得面积数据,再使用collections.sort(xx)来对xx中数据排序,并且用xx.add(circle.getArea())等来向链表中添加面积数据,再用for循环加上xx.get(i)来输出排序后的数据。
对于第六次作业第六题:




对于第六次作业第六题,主要在于接口的声明和对于接口的实例化,接口类中的方法必须是抽象方法,而实现抽象方法的类必须使用implements来创建,并且必须实现接口类中的每个抽象方法,接口类必须使用interface来声明,这道题主要在于接口的声明和接口类中方法实例化必须使用implements定义的类实现。
改进建议:
对于父类中的方法,如果子类没有覆写的话,那么在子类中可以直接调用父类的方法的到合适的值,如果父类的某个方法,在子类中已经覆写了,那么调用这个方法必须用super.加上方法名来调用父类中的这个方法以得到合适的值,就像是调用父类中的私有变量一样。对于排序,不再需要使用冒泡排序,选择排序,或者是插入排序,可以把数据放入ArrayList<Double> xx = new ArrayList<Double>();中,然后用xx.add(方法名),把数据添入链表中,再用collections.sort(xx);把其中的属性排序,以便减少代码数量,提高代码质量。
总结:
对于这三次作业,初步了解了正则表达式,对于数字,非数字,字母,空白符换行符等字符的表示方法,还学会了继承的应用,对于父类中私有类型变量的调用,对于父类私有方法的调用,对于子类对父类方法的覆写,对于多态的实现等等等等,还有对于接口的声明定义,以及对于接口方法的实例化,经过这三次作业的洗礼,以及初步进入了java的世界,但我感觉初步进入就已经感觉到了一定的难度了,我的建议就是希望老师题目量可以多一些,但是题目难度可以降低一些,有时候题目是真的难,写了一两天终于可以运行了,但是答案总是得不到,自己都不知道到底哪里出问题了。还有就是希望老师能适当讲解一下题目,不胜感激。

浙公网安备 33010602011771号