其他分享
首页 > 其他分享> >

作者:互联网

一、前言:这三次的题目主要针对排序、正则表达式的使用、继承、多态性、聚合进行了相应的练习。总体来说,第四次和第五次的题目集难度较大,第六次题目集的难度较小,但是题量多了。从这几次的作业我也学到了很多知识。

二、设计与分析

题目集4. 7-2:

类图:

 

 

 

 

 

复杂度:

 

 

 

运行结果:

 

 

 

 

(1)踩坑心得:不会在Day类可以直接通过getYear方法和getMonth方法直接应用Year和Month类里的getValue方法。当月份为12和1月时,忘记了变换年份,在二月的时候闰年的时候改数组2月对应的天数没有正确,碰到第一个闰年,后面不管闰年还是平年就都变成了29。

(2)改进建议:对于上面的2月份的问题我在判断闰年的if后面加了应该else就对了。

判断合法时我认为我用布尔型的值最好写出返回true和false,最好不要boolean x = 判断条件,return x;。

题目集5. 7-5:

类图:

 

 

 

复杂度:

 

 

 

运行结果:

 

 

 

(1)踩坑心得:通过上一次题目集修改后,我发现每次输出都是Wrong Format,发现Day类里判断日期是否合法出现了错误,因为没有把月份传进去,传进去的是0,所以日期出现了错误。还有我不知道我为什么这个点一直过不去,一直运行超时,我认真的输入了很多的数据都过了,但是他就是运行超时。(希望能有人解惑)。谢谢!

(2)改进建议:对于这种类与类之间没有什么关联的,一定要注意应用对象有没有创建好,要注意参数的传递。

这两个聚合的区别;从类图看:可以发现这两个题目不一样。

第一个Year类和Month类以及Day类有关联,而第二个图里这三者没有关联,只与Dateutil类有关。

而且第一个聚合Day类可以直接通过getYear方法和getMonth方法直接应用Year和Month类里的getValue方法。

第二个聚合就没有这个功能,它必须要有这个类的对象,才能用那个类里的getValue方法。

从复杂度来看:第二个的复杂度貌似比第一个的小,但是都超出了绿色范围,可能是我的代码写的有点复杂了。

总的来说:第一个聚合更利于我们修改数据,因为它不需要另外创建对象来应用其他类里的方法。第二个主要是出现错误容易发现,并且不会关联到很多的代码。简而言之,就是第一个聚合关联多,而第二个关联没有你们密切。

题目集4  7-3:

类图:

 

 

 

复杂度:

 

 

 

 

运行结果:

 

 

 

(1)踩坑心得:不知道继承怎么用,就每个类都写了应该有什么方法,虽然写出来也是对的,但是有点没有按照题目要求。改成继承后输出类名的时候输出了两遍,然后我当时找不出来哪里出现了问题,修改了好多遍都没有发现问题所在。

(2)改进建议:主要针对上面输出出现问题的改进,原来是因为创建对象时,会引用这对象类型里的不带参数的构造方法,所以我才会输出两遍,只需要把main方法里的输出输出类名的代码删掉就行了。

题目集6  7-5:

类图:

 

 

 

复杂度:

 

 

 

运行结果:

 

 

 

(1)踩坑心得:当时用for循环来输入每组数据并输入一组数据就计算一个结果,然后发现for循环用了好多个,很麻烦,还有计算三角形的面积时,分一般三角形和特殊三角形来算,也很麻烦,代码也太长了,还需要通过边来判断是什么三角形。还有就是如果不合法数据就要输出Wrong Format,我当时不合法时输出的是Wrong Format和各个数据的结果都是0.00,我不合法时没有终止程序。

(2)改进建议:可以在每个类里面创建一个带参数的构造方法,然后再在main里面创建给个类对象数组,就可以避免多个for循环,对于求三角形面积,可以用海伦公式,这个公式只要知道三条边就能算出三角形的面积,根本不需要分三角形的类型,这样可以使代码更加简洁,不会显得冗长。对于终止程序我后面改进发现可以用System.exit(0);来直接终止程序。

题目集6  7-6:

类图:

 

 

 

复杂度:

 

 

 

运行结果:

 

 

 

(1)踩坑心得:当时不知道如何使用接口,就直接按照自己的方法写,也写出了答案,但是没有按照题目的要求,那我就没有学到接口的使用。还有当时没有用带参数的构造方法,导致参数传不进去,最后的结果都是0。

(2)改进建议:加上带参数的构造方法,在main里面创建对象时带上需要给参数赋的值,就可以把参数传进去。

三种渐进式图形继承设计的思路与技术应用的不同:

第一种:运用了继承和封装,将属性封装,实现子类将父类的方法重写,并通过子类实现相应的运算。

第二种:运用了继承和封装以及抽象类(父类),还有多态性。抽象类的方法必须要在子类中实现,而且抽象类里的属性和方法都是抽象的,需要通过子类才能引用。多态性是通过创建一个对象数组来引用类里的方法,可以增加数据的复用性。

第三种:运用了继承和封装以及接口,在该题中接口时是一个类,在该类里面有一个空方法,这个方法也必须在子类里继承,而且继承的关键词也由extends换成了implements。

题目集5  7-4:

对于这道题我没有做对,只过了一个非法测试的点。

在此附上代码:

import java.util.Scanner;

import java.util.regex.Pattern;

import java.util.regex.Matcher;

import java.util.Map;

import java.util.Arrays;

import java.util.Set;

import java.util.HashMap;

public class Main {

public static void main(String[] args) {

Scanner LHQ = new Scanner(System.in);

        Map<String, Integer> map = new HashMap<String, Integer>();     

        StringBuffer lhq=new StringBuffer();

        int count = 0;

        String z =LHQ.nextLine();

        while (!z.equals("exit")){

            lhq.append('\n').append(z);

            z=LHQ.nextLine();

            count = 1;

        }

        String h = lhq.toString();

String [] k = { "throws","transient","true","try","void","volatile","while",

 "char","class","const","continue","default","do","double","else",

 "enum","extends","false","final","finally","float",

 "int","interface","long","native","new","null","package",

 "for","goto","if","implements","import","instanceof",

 "private","protected","public","return","short","static",

 "strictfp","super","switch","synchronized","this","throw",

 "abstract","assert","boolean","break","byte","case","catch"};

         h = h.replace("("," ");

         h = h.replace(")"," ");

 h = h.replace("["," ");

 h = h.replace("]"," ");

     h = h.replace("!"," ");

     h = h.replace(":"," ");

     h = h.replace("/"," ");

     h = h.replace("."," ");

         h = h.replace(":"," ");

         h = h.replace("\\"," ");

         h = h.replace("-"," ");

 h = h.replace("*"," ");

 h = h.replace("+"," ");

         h = h.replace(">"," ");

         h = h.replace("="," ");

         h = h.replace("<"," ");

     int bz = 0;

Pattern p = Pattern.compile("/\\*.*\\*/");

        Matcher m = p.matcher(h);

        while(m.find()){

          h = h.replace(m.group()," ");

          m = p.matcher(h);

        }

        p = Pattern.compile("\".*\"");

        m = p.matcher(h);

       while(m.find()){

          h = h.replace(m.group()," ");

              p = Pattern.compile("\".*\"");

          m = p.matcher(h);

       }

        p = Pattern.compile("//.*$");

        m = p.matcher(h);

       while(m.find()){

          h = h.replace(m.group()," ");

          m = p.matcher(h);

   }

            if(count==0){

                 System.out.println("Wrong Format");

            }

       String [] t = h.split(" ");

for(int x = 0 ; x < t.length ; x++)

  for(int q = 0 ; q < k.length ; q++)

if(t[x].equals(k[q]))

map.put(k[q], 0);

for( int x = 0 ; x < t.length ; x++)

  for(int q = 0 ; q < k.length ; q++)

if(t[x].equals(k[q]))

{

bz = map.get(k[q]);

map.put(k[q], bz+1);

}

Set set = map.keySet();

        Object[] a = set.toArray();

        Arrays.sort(a);

        for(Object kj:a){

            System.out.println(map.get(kj)+"\t"+kj);

        }

}

(1)踩坑心得:对于这道题我只能说我尽力了,但是就是过不了,题目给的那个测试点我过了,提交之后我就没有对,我也不知道原因是什么。

(2)改进建议:我感觉我要大改,因为我还没有找出原因。

对于这道题集合框架应用的分析总结:

这道题目用来太多的类Map,Arrays,Set。

Map主要是键值对,用其里面的Put方法给每个键赋值,用Empty方法来判断输入的代码是否为空,用Set方法来构建一个集合,而Arrays类里的Sort方法用来排序。通过这一系列的方法就可以来实现创造一个有序的集合,然后通过for循环来匹配关键词,再按照题目要求输出。

对这三次题目集用到的正则表达式技术的分析总结:

这几次题目集用来太多正则表达式,正这表达式就是用来检验数据的,这几次里用到的

正则表达式有用来检验时间的

“(((([1-9])|([1-9][0-9])|([1-9][0-9]{2})|([1-9][0-9]{3})/((([13578]|1[02])/([1-9]|[12][0-9]|3[01]))|(([469]|11)/([1-9]|[12][0-9]|30))|(2/([1-9]|[1][0-9]|2[0-8])))))|(((([1-9][0-9])(0[48]|[2468][048]|[13579][26]))|(([48]|[2468][048]|[3579][26])00))/2/29)) ((([02468])|(1[02468])|(2[02])):00)”,

删除注释和字符串内容的"/\\*.*\\*/"和"\".*\""和"//.*$",

qq号"[1-9][0-9]{4,14}",

学号"2020+(1[1-7]|61|7[1-3]|8[1-2])+(0[1-9]|1[1-9]|2[1-9]|3[1-9]|40)",

验证码的校验"[A-Z0-9a-z]{1,4}"。

这些正则表达式有难有易,通俗点讲都是来判断输入那些合法那些不合法,不合法的去掉,合法的留下。

三、总结

学习总结:

对于这几次的题目集我学会了正则表达式的基本使用方法,继承的应用,抽象类的使用和接口的应用,以及多态性的使用,还学会了Java里的三种排序方法(插入排序,选择排序,冒泡排序)。不仅仅这样,我还学会了继承与抽象类,多态性,接口的综合使用,以及学会了带参数的构造方法和不带参数的构造方法的使用方法,还学会了保留两位小数的不同方法,以及Arrays.sort和Collection.sort的排序方法,以及Map的使用,最后还有增强的for循环的使用。

通过这几次的题目集我感觉我的正则表达式还应用的不熟练,需要进一步的了解,还有就是Map的使用也要多加练习,更重要的是还要努力将这几次学到的东西融汇贯通,不能将问题越积越多,要尽早解决自身存在的问题。还有对于多态性不太理解,应用熟练。对于接口的话,单接口我基本可以使用,但是对于多接口就搞不懂了,这方面的学习还不够深入,所以我觉得我应该更加深入的学习一下。

课程建议:

对于老师的上课模式,我没有什么问题,以及这样的作业形式都可以接受,就是查重后的处罚我依旧觉得需要改进。课下模式我还能接受这样的作业形式以及实验形式,但是我就是觉得向老师问作业的提交以及一些操作问题时,老师的回答都感觉有点模糊的感觉,就是不理解什么意思,对于操作问题,老师就基本回答不完整,可能是认为我们后面都会,其实我们不一定会的,希望老师以后可以完整的讲完,不管我们会不会。其他的就没有什么建议了。

 

标签:总结性,题目,复杂度,blog2,replace,util,import,方法
来源: https://www.cnblogs.com/lhq-and-cjx-3327940673/p/14726173.html