第二月的总结

 2021-04-27       学号:20201111——李博茏

  1.  前言:第四次题目集: 第一题:校验水文数据及处理,知识点:考察字符串的输入(获取),和对每块的字符串的输入的处理,输入的校验是用正则表达(尤其是对日期),和对类之间的关系的处理,输出要对输入的校验和对应的结果。第二题:日期问题面向对象设计。(聚合一):知识点:考察类与类的关系,这里考察的是聚集,并且对类与类的之间的功能进行处理(如边界及其他功能的实现),输入数字要进行校验,输入的数值所对应的功能进行。第三题:图形继承。知识点:对于输入的考点:对输入进行校验之后然后对输入的数子进行处理然后进行下一步操作;对类的考点:需要的每个类进行什么操作要有的明确的安排,而且需要继承父类来重写。题量来说是比较合理的,只是时间没有安排的合理化,事情较多,而且没找准方法去做事。难度:可能一开始就没怎么去理解正则表达,理解了原理,和懂语法的使用和目的,所以总的来说是比较ok的,可能是需要时间去实践的。第五次题目集: 第一题 : 找出最长的单词-hebust :知识点:考察字符串的处理能力,使用Arraylist 创造一个空间数组,使用collection 来进行排序,和对Arraylist下标的含义;第二题: 合并两个有序数组为新的有序数组 。知识点:利用Arraylist 存储数据,并利用其中自带的方法处理问题。第三题:对整型数据排序。知识点:三种排序的算法(冒泡排序,选择排序,插入排序)。第四题:统计Java程序中关键词的出现次数。知识点:考察Java53个关键词,对字符串输入,考察处理字符串时特殊符号的处理方式,考察使用正则表达,考察对关键词的排序方式。第五题:日期问题面向对象设计。知识点:使用类来完成题目所需功能,考察类的关系(聚合和依赖)。难度:相对第四次来说简单了许多,但对基础越来越看重了,我可能还是多训练一下编程能力。第六次题目集:第一题: 正则表达式训练-QQ号校验 。知识点:正则表达的使用。第二题:字符串训练-字符排序 。知识点:对字符串中字母的理解和ASCII的理解。第三题: 正则表达式训练-验证码校验 。知识点:正则表达的使用和数值校验。第四题:正则表达式训练-学号校验。知识点:正则表达的使用和对一定要求的校验。第五题:图形继承与多态。知识点:通过写类来完成题目所需功能,类与类的关系是继承和多态。第六题: 实现图形接口及多态性。知识点:通过写类来完成题目所需功能,并且需要抽象来包装方法,类的关系是继承和多态。难度:相比前几次是简单拿分的,也对面对对象有了一定的了解。
  2. 设计与分析:题目集4(7-2):

     

     

     

     题目集5(7-4):

     

     

     

     比较两种聚合:第一种是用功能类当做聚集类,第二种是在外面写一类来当聚集类,两种都体现了可重用性,当相比之下,第二种更加的清晰明了点,关系不是太复杂。  题目集4(7-3):

     

     

     

     题目集六 7 -5 :

     

     

     

      题目集六 7 -6 :

     

     

     

     三种都是图像行继承:第一种是先设计好Shape内的方法,再通过继承来拓展其他类,子类的子类再继承,从而完成功能,符合开扩闭修的原则。第二种不像第一种要继承不同的父类,这个只需要继承一个父类就好了,以抽象类作父类,更加的安全,更加的清晰点。第三种:用了接口作super类,增强了可复用性,使代码更加的便利了。

  3. 对三次题目集中用到的正则表达式技术的分析总结:首先来说正则表达真的是考察我们同学的自学能力,我之前可能理解能力是很强的,但是有点小懒,但是都改过来了。第一次的真正表达没有动手,可能是时间规划的不是特别的理想,所以先pass掉这个,第二次的正则表达,考察的是从一个代码中截取关键词,输入的时候的确碰壁了,网上查了资料,先是把每行的字符串存到一个buffer String中,再转到String中,再慢慢进行校验,抽取排序之类的。第三个:简单的对字符串进行校验,没什么技术含量,很快就可以解决,这里就不一 一说明了。
  4. 采坑心得:从第四次题目集开始说把:

     

     这是第二题:当时写这个题目,里面的功能一开始是全部一起写,结果到pta就报错了,一开始就编译错了,可能是没注意好细节,如果注意好了细节就会减少消耗时间。还有几个点没过可能是算法出现了问题。(

    public DateUtil getPreviousNDays(int n){
    for(int i = 0 ; i < n ;i++) {
    this.getDay().dayReduction();
    if(!this.getDay().validate()) {

    this.getDay().resetMax();
    this.getDay().getMonth().monthReduction();
    }
    if(!this.getDay().getMonth().validate()) {
    this.getDay().getMonth().resetMax();
    this.getDay().getMonth().getYear().yearReduction();

    }
    })这块的算法可能一些年到天的转换出现了问题。

     

     第三题:是图像继承:一般的语法是没问题的,可能是没看清题目,容易把PI直接用3.14,所以就会小数点偏小一位。(return 4 * getRadius() * getRadius() * Math.PI;)所以就直接改成了Math.Pi了。其他的点都没问题。

  5. 第五次题目集:第一题:当时想了好几种方法,最后想了一种之前没做过的事,用了动态数组去实现,可能当时没怎么弄清动态数组的实现原理,所以查了资料。    第二题:当时写没碰到问题,写的很自然,当时以为Arraylist有自己的sort的方法,到eclipse上就会报错,所以到网上查资料,就用了(Collections.sort(list);)来排序。   第三题:三种排序,我之前只练了冒泡排序和选择排序,所以在网上查了资料插入排序,但是运行的时候出现了问题

    public static void insertionSort (int[] arr ) {
    int pos,temp;
    for(int i=1 ; i < arr.length ; i++){
    pos = i;
    while( pos != 0 && arr[pos] < arr[pos-1] ){
    temp = arr[pos];
    arr[pos] = arr[pos-1];
    arr[pos-1] = temp;
    pos--;
    }
    }
    for(int output: arr) {
    System.out.print(output+" ");
    }
    }                            输出的时候会显示出最大的和第二大会出现位置不对,重写了两次算法,最后发现了是for语句定义出现了偏小的问题。

     

     第四题:很多问题都没有及时的解决,例如【】的介入,可能当时没考虑到,而且当时太赶了,以后会注意应该从简单到难的去完成,不要一个个去完成。当时学这个正则表达的时候的确没用好方法,以后会注意下,先理解题目大意然后去做题目。

     

     第五题:当时写这题目是功能一个个去实现的,所以相对比上次好了很多,但是忘了一件事,就是不要总去硬磕,而且需要有后备方案,可能当时没怎么去实现,现在想想挺后悔的。

  6. 第六次题目集:第一题:当时写校验的时候不知到写的是否正确,所以最后自己却网上找了网站去弄校验。 第二题:这个题目相对简单但是当时花了挺久去理解字符串的用处。 第三和第四题:都是正则表达的练习,第四的时候发现了学号在00会多余所以从改了校验方式。第五题:当时还不知道海伦公式,所以花了挺多时间去想的,最后在网上查了一下如何解决这方面的算法的,最后成功的解决了这一块。而且还记得当时以为toString要使用抽象类去包装,看书之后直接复写就行了。书果然是最强大的工具,能给人带来智慧。

    double getArea() {
    // TODO Auto-generated method stub
    double p = (side1 + side2 + side3) / 2;
    return Math.sqrt((p* (p - side1) * (p - side2) * ( p - side3) )) ;}

    @Override
    public String toSring() {
    // TODO Auto-generated method stub
    return null;
    }           第六题:当时写接口的时候直接从网上速学的,还有当时输入和越界出现了问题,最后换了位置。

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner(System.in);
    double radis = input.nextDouble();
    if( radis <= 0) {
    System.out.println("Wrong Format");
    System.exit(0);
    }
    double width = input.nextDouble();
    double length = input.nextDouble();
    if( width <=0 | length <= 0 ) {
    System.out.println("Wrong Format");
    System.exit(0);
    }
    GetArea getArea = new Circle(radis);
    System.out.println(String.format("%.2f", getArea.getArea()));


    Ractangle ractangle = new Ractangle(width,length);
    GetArea getArea2 = new Ractangle(width,length);
    System.out.println(String.format("%.2f", getArea2.getArea()));
    }

  7. 改进建议:应该做事情的时候应该考虑先后关系,由简单到难的,还有做任何事情应该有方案的,万一 一种不合适还可以立刻修改。学新东西的方式出现了问题,应该循序渐进,不能操之过急。
  8. 总结:对字符串有了更深的理解,也会使用大部分,和正则表达的使用,对对象的运用,类之间的关系有了更深的理解。对于线上线下的课程的结合肯定是好的,但是一旦变成强制要求就不太好了,我们应该是由被动学习转为主动学习这才是真理,东西是学不过来的,只有自己去努力的学习,前进,才会在这个即充满机遇和挑战的时代站住脚跟。所以老师应该做引导而不是强迫。

    一个姓牛的人曾经说过,学习最大的动力就是永远有问不完的问题。(如果你没听说过这句话,那就现在盯着屏在看一遍吧)

      上了大概20年的学,我们都清楚,学知识有三问—Why?When?where?

           1)why?

          其实Java并不是纯面向对象的语言。比如,java中的基本数据类型就不是面向对象的,但是我们在实际运用中经常要将基本数据类型转化为对象便于操作。

          2)when??

         什么时候使用包装类?自然是你需要操作数据的时候,例如进制之间的相互转化、数据之间的比较(compare)、求出该类型的最大最小值...

          3) where???

         第一个where:   包装类都位于Java.lang包下

         第二个where:   至于在那用,根据具体问题具体定夺。
    (对类的总结,我摘抄了网上的一段话。)

posted @ 2021-05-01 13:52  CharleyAnthony  阅读(58)  评论(0)    收藏  举报