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), " ,?.!():""'' #[](){};.") ;// 按逗号/空格/叹号分割,其他字符自行添加
再把产生的各个分开的单词给存进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), " ,?.!():""'' #[](){};.") ;// 按逗号/空格/叹号分割,其他字符自行添加
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等新知识点的运用。也感谢老师和各位同学的辛苦付出,希望各位在代码上的造诣越来越高,能一下写出一个代码,早日成为高手。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。