pta作业·博客第三篇

     

                                                                                                                                                                                               Java博客第三篇

       本次pta作业主要围绕继承、多态的应用;ArrayList泛型的应用方法Comparable接口及泛型的应用以及单一职责原则的应用,“开-闭”原则的应用另外,还涉及到了封装、继承、多态抽象类接口。 List、Set或Map等重要知识点来写,我先说一下各次作业的大概内容和所用到的主要知识点。第一次pta三道题分别是图形卡片类排序和分组,主要让我们深入了解Comparable接口及泛型。第二次pta作业是雨刷设计类,用到的是关于类的封装、继承、多态抽象类接口等知识。第三次pta作业两道题分别是统计java关键词的字数,主要运用 List、Set或Map等知识。

 

一.第一次pta

       第一次pta作业是雨刷设计类,之前老师也在课堂上花时间讲了一下如何设计雨刷,以及设计雨刷时的一般思想。当时也写了关于普通雨刷类的程序代码。而本次pta最大的不同就是在当时雨刷代码的基础上,再度添加一些功能,使得该雨刷程序能够满足不一样汽车的要求。为了符合java的程序代码设计规则,需要使用到java中一些常见的代码规则,比如单一职责原则的应用,“开-闭”原则的应用另外,还涉及到了封装、继承、多态抽象类接口等知识。

本次的雨刷类uml图如下:

 

 

      可以看到,添加了很多程序,但都符合java的单一设计职责,以及封装,继承和多态的使用。代码的测试部分也很正常,

 

 

 

 

 

       除了一些正常测试外,还加入了必要的非法测试以及部分升档降档测试,本次代码由于之前写过,写起来遇到的问题也不多,同时在一些细节处理上,不会的也和同学探讨了一下,使得本次实验得以顺利完成。再就是遇到几个小问题,一直改不出,特别是临界点的问题,比如输入的是

 

 

 

这些关于超出界限的问题,后来干脆放到一个类中,才把问题解决。

 

 

二.第二次pta

      本次pta写的是 统计Java程序中关键词的出现次数 ,涉及了List、Set或Map等知识,其中有好多种思路可以选择,但是因为自身代码储备量原因,最后不得不写了一个又长又简单的代码,以及使用了list方法。

思路就是把一段文字中的各个字按照逗号,句号等分开,即StringTokenizer st=newst=new StringTokenizer(list.get(k),  " ,?.!():\"\"''\n#[](){};.") ;// 按逗号/空格/叹号分割,其他字符自行添加  

再把产生的各个分开的单词给存进list数组中,然后在list数组中按照字典顺序进行排序。最后输出即可。

    

其中主要代码如下:

   for(int k=0;k<list.size();k++) {

               if (list.get(k).startsWith("//")) continue; //不处理单行注释

      // StringTokenizer st = new StringTokenizer(list.get(k), "/, !*(/*{};[]).+-=`~!@#$%^&?><://") ;// 按逗号/空格/叹号分割,其他字符自行添加        

           StringTokenizer st = new StringTokenizer(list.get(k),  " ,?.!():\"\"''\n#[](){};.") ;// 按逗号/空格/叹号分割,其他字符自行添加  

 

           while (st.hasMoreElements()) {      

             //if(st.nextElement()!="/")

           //System.out.println(st.nextElement());      

           juzi1=(String) st.nextElement();

           list1.add(juzi1);

            //else break;

            }   

           

   }

        添加的额外代码则是把五十多个关键字手动排序,这样子方便以后输出·,而且不用再次排序,唯一的缺点是代码量高,要解决的bug也不少。

       先讲讲代码中提到的可以解决问题的思路,当时和其他人讨论了一下,老师在课堂上也提及了一部分思路,可最后动起手来写代码的时候,才发现动嘴说说是真的不会闪到腰,说起来简单无比。一般大众化的思路是把一篇文章中的各个代码按照空格,逗号句号等各个标点符号分开来,遇到换行的情况则是先把一篇文章中的每一行单独取出,然后对每一行代码进行处理,这样写的缺点是处理多行注释时不好解决,所以后来又改进了代码,使得程=程序得以顺利实现。

       本次pta五百来行的代码真的是不容易写,在处理了一个个bug之后,又要解决各个部分之间的关联情况,解决完之后,还要整体检查代码,使得可以运行无阻。经过一段时间的敲写之后,才得以实现代码的正常运行。

再来一个运行截图,看看成果:

 

 

 

总的来说,这次pta并不简单,一些问题始终没有解决。在时间结束之后,同学们才相互探讨怎么写,代码最终也是运行成功了//。

 

 

三.第三次pta

本次pta写的主要是关于表达式求值的代码,即编写程序,从键盘输入一个合法的表达式,并对该表达式进行求值并输出。利用的是堆栈的知识点,需要用到各个数据结构中堆栈的应用,

Status InitStack(SqStack *S){

    S->base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

    if(!S->base)

        exit(OVERFLOW);

    S->top=S->base;

    S->stacksize=STACK_INIT_SIZE;

    return OK;

}

像这个判断栈是否为空等等数据结构中的算法。

以及

Status StackEmpty(SqStack S){

    if(S.top == S.base)

        return TRUE;

    else

        return FALSE;

}

返回栈顶算法

Status GetTop(SqStack S, SElemType *e){

    if(S.top == S.base)

        return ERROR;

    *e = *(S.top-1);

    return OK;

}

和有关栈的插入算法。最后我也就不有所隐瞒了,由于对本次知识点的不熟悉,以及不想写pta之外,所以就随便写了个

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

的代码,同样,也来一个运行结果截图:

 

本次作业也算是到此为止。

 

 

 

 

 

 

四.总结

         通过本次作业,可以看到,本次pta作业主要围绕继承、多态的应用;ArrayList泛型的应用方法Comparable接口及泛型的应用以及单一职责原则的应用,“开-闭”原则的应用另外,还涉及到了封装、继承、多态抽象类接口。 List、Set或Map等重要知识点来写,而且可以让我们深入了解Comparable接口及泛型。类的封装、继承、多态抽象类接口等知识。以及 List、Set或Map等知识。

        另外,这三次pta作业之间的关系我也不多说了,主要是关于封装、继承、多态等旧知识点的运用以及 ArrayList泛型的应用方法Comparable接口及泛型的应用以及单一职责原则的应用,和List、Set或Map等新知识点的运用。

 

        这三次pta也成功使得我们初步学会如何使用以及正确理解掌握封装、继承、多态等旧知识点的运用以及 ArrayList泛型的应用方法Comparable接口及泛型的应用以及单一职责原则的应用,和List、Set或Map等新知识点的运用。也感谢老师和各位同学的辛苦付出,希望各位在代码上的造诣越来越高,能一下写出一个代码,早日成为高手。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

posted @ 2020-06-06 16:42  疯人自语  阅读(241)  评论(0编辑  收藏  举报