Java作业的第三次总结
0.前言
针对我们第三阶段的作业(共三次:pta中的作业)发表总结性博客文章。
1.作业过程总结
作业练习心得体会:第一阶段的学习让我知道怎么样从面向对象向面向过程过渡,而第二阶段让我更加深刻的理解面向对象的知识面最主要的是包括:通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性,但第三阶段的学习包括程序的重构,接口与抽象类的使用,同时最重要的是对栈的使用,与此同时巩固了类的封装性、继承性以及多态性的综合应用,也进行了正则表达式的学习和巩固运用。
①第七次的作业:这一次作业雨刷程序功能扩展设计我是一遍过的,因为这一次老师即给了指导书同时基本上都是老师上课的内容,在上一阶段的学习也让我学习到相关类的封装性、继承性以及多态性的知识,所以做这一次的大作业基本上可以说是没有什么阻碍的,就是关键在于一些细节方面的问题;但是总是就得自己的代码冗余性高,代码利用率比较低,所以代码的编程能力有待提高。
②第八次的作业:这一次作业统计Java程序中关键词的出现次数,主要是分割和匹配,由于之前有相关的知识点(在水文校验中学习到分割),所以这一次做的过程中问题就没有非常大,毕竟有了基础。就是关键在于自己设计类没有很多想法,所以感觉自己设计的比较低级,应该说是类的运用不熟练,同时对类的理解也不是很熟悉。
③第九次的作业:这一次的作业表达式求值主要是正则表达式和栈的运用,正则表达式对于现在的我来说还是很难,所以基本上的判断就是运用代码判断的,但是最难的就是栈的使用,当初C语言的时候学习栈就不是很好,现在根本不知道怎么用,然后通过网上查找资料和书本上的资料重新自学一次栈的相关知识,对栈的理解和使用也有了进一步的了解,栈的重点应该在于栈先进后出的思想,以及对入栈,出栈 两种操作的运用。
作业过程中遇到的问题及解决方法:
①第七次的作业:这一次实验在编程过程中,对刻度盘当前刻度显示的数字不知道如何去实现,如何通过仔细观察下面的内容:
然后观察到switch里面的条件联想到添加一代码:this.brush.setB(this.dial.getPos());来提取出当前刻度盘显示的数字,来解决无法显示刻度盘数字的问题。
②第八次的作业:这一次实验在编程过程中最主要的问题就是在正则表达式的使用,因为自己基本上不怎么会写正则表达式,所以就基本上就是百度然后自行修改成自己需要的正则表达式。虽然不怎么会写,但是通过这种方式可以让我慢慢的学会写正则表达式和通过表达式来解决一些比较复杂的判断问题。这一次的主要表达式就是:b = b.replaceAll("\"([^\"]*)\""," ");和b = b.replaceAll("/[*](.*?)/"," ");
③第九次的作业:这一次实验在编程过程中最主要的问题就是在栈的运用方面的问题,和正则表达式的使用。一开始不知道含0开头的数字到底是对还是错误,然后一开始把他当做错误,后来发现并非如此,所以又重新写,但是如果是这样那么最难的就是除0这这一张情况了,因为例如:5/0是不存在的,而5/01就是存在的也是合法的,所以一开始我是错误了,后来先用if(b.contains("/0")){System.out.println(a+" "+"="+" "+"NaN");}来解决5/0的情况,然后通过分割判断5/01这种情况这样两种情况就被分开处理了。还有最最难的问题就是栈的相关问题,然后我借用如下的代码对运算符和数值进行了两个栈的运算,然后在计算的时候将他们把数字串起来,然后通过其他函数实现运算: Stack<Double> number=new Stack<>();//数值
Stack<String> test = new Stack<>(); // 运算符栈
StringBuilder sb = new StringBuilder();//把数字串起来
然后对于比较优先级的方法:一开始没有想法,然后通过室友的指点了解到了,可以使用先把运算符定义为一点的数字,相同优先级的定义一样,优先级越大定义的数字越大,然后通过两个运算符的定义数字相减,如果等于0说明同级、小于0说明优先级小、反之优先级大。然后通过判断了优先级,然后就是进行表达式的取值过程了。
每次作业花费的时间比例:第七次作业的问题:第八次作业的问题:第九次=1 :2:3
时间分析:因为第九次作业有我的弱项栈的运用,使用花了好多时间来学习栈和写栈,并实现实验目的,而实验七基本上都是老师讲过的内容,所以花的时间相对较少,第八次作业在于有一个测试点就是过不去,然后磨了好久,最后还是没有过那个测试点因此花费了一些时间。
对编程过程的严谨性的认识及教训:第八次作业中触发运算的入栈和出栈的顺序弄反了,然后就找了好久,一直在那浪费时间,后来还是在室友的帮助下找到了错误的地方。自己写的基本上找不到错误。一直觉得自己是对的,即使我自己检查多少次最后都一样的结果。如果我写代码可以更严谨一点,这样就不会浪费太多的时间在找错误了。可能是因为知识点不清楚,一个好的代码会让代码的实用性增加,更加简洁易懂,所以在以后的学习中要重视严谨性,不仅仅是在代码编程方面,还有其他课程的做题方面,这样不仅可以节约时间,也可以让提高自己学习的效率。
2.OO设计心得
面向对象对栈的理解:栈的重点在于栈先进后出的思想,以及对入栈,出栈 操作的运用,如果无法理解两张操作那么栈基本上是写不出来的,因为这是栈最主要的运用。
对正则表达式的理解:正则表达式可以用于快速判断输入表达式在正确或错误性,也可以用于将字符串进行分组,可以减少很多较麻烦的判断和分组的情况,可能正则表达式一句话,代码判断就是几十行,所以减少代码的长度也降低了复杂度,代码的复用性也更强。
类设计心得:类的原则包括单一职责原则及“开-闭”原则。同时类是面向对象最关键的一种属性,如果没有类的定义,就不会有面向对象的存在。类不仅可以升高实用性,也可以对代码进行简化。
3.测试的理解与实践
测试对于编码质量的重要性:测试可以验证编程的代码的正确性和实用性,如果没有测试,那么写的代码可能欠缺很多,这样的实用性差,可能在某个范围内,代码是可读的但是特殊案例就不可读,这样如果有测试我们就会让优化代码,让代码的质量提升,实用性和利用率提高,所以测试对于编程的质量起决定性的作用。
查阅资料,假设使用Junit进行程序的测试是否可行:可行,JUnit是一个Java语言的单元测试框架,它有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。同时junit就是别人写好的单元测试框架,使用此框架可以大大缩短代码的测试时间和准确度。
4.课程收获
总结这最后一个阶段在OO方面的教训及收获:最主要的收获就是前面所叙述的栈的使用和对栈的理解,他让我重新学习了关于栈的知识,让我进行了这方面的查漏补缺,知道栈的学习并没有我想象中的那么难,主要是理解入栈和出栈的操作就会更简单的运用栈。最主要的教训还是代码的严谨性,我在这方面花费的时间真的比较多,一直以来都是这样的问题,这同时让我对代码严谨性的重要性有了更进一步的认识。
5.对课程的建议
课程内容讲解方面的建议:感觉老师现在的教学方法挺好的,如果偏要有一个建议,那就是平时多出一点基础题让我们练练自己的编程能力。
浙公网安备 33010602011771号