前言
本次博客主要内容为此次三次作业的总结,整门java课程学习的总结,以及在此次java课程中的收获,和对课程的意见。
作业过程总结
第一次作业主要考察的是对程序的可扩展性,实现开闭原则非常重要,因为程序随着时间,需求会有所变化,避免需求变化时,代码的大量改动。
1、
可扩展性指的就是实现开闭原则,以后想要增加新的雨刷,可以实现尽量不修改代码下,只要增加代码,我的思路是新建一个接口有控制汽车刻度盘,抽象类负责挡位。新增雨刷只要接口就行。新增一个agent类就行了。
interfaceAgent2{public voiddealSpeed();
}abstract classdeal{public voidleverUp() {
}public voidleverDown() {
}public voiddialUp() {
}public voiddialDown() {
}
}
第二次作业主要考察的是map,set,list等的应用,运用hashmap可以同时记录数值和字符。
1、
需要将字符和出现次数同时存进hashmap,运用set存储key值,运用object数组储存set,array对array中的key进行排序得到。
Map hashMap = new HashMap(); //定义hashmap
Setset =hashMap.keySet();
Object[] array=set.toArray();
Arrays.sort(array);for(Object key:array){
System.out.println(hashMap.get(key) + "\t" +key );
}//遍历hashmap
第三次作业主要考察的是栈的应用,以及判断运算符优先级及算法的运用。
1、
主要考察的是对栈的运用,熟练使用peeek()和pop(),可以先把数字和运算符分开并一起保存在listl里面,然后一边将数字和运算符存进栈,一边判断即将存进栈的运算符和栈顶运算符的优先级,栈顶优先级大的,就提出数字栈的前两个进行运算,栈顶优先级小的,则不进行运算而是将即将进栈的运算符入栈。另外判断运算符优先级,当运算符比栈顶的运算符优先级小,则在数字栈开始运算。
//判断符号优先级
String s1 = operator.peek();if (s.equals("*")||s.equals("/")) {if (s1.equals("+") || s1.equals("-")) {return '>';
}if (s1.equals("*") || s1.equals("/")) {return '
}if (s1.equals("(")) {return '>';
}if (s1.equals(")")) {return '
}if (s1.equals("#")) {return '>';
}
}if (s.equals("+") || s.equals("-")) {if (s1.equals("+") || s1.equals("-") || s1.equals("*") || s1.equals("/")) {return '
}if (s1.equals(")")) {return '
}if (s1.equals("(")) {return '>';
}if (s1.equals("#")) {return '>';
}
}if (s.equals("(")) {return '>';
}if (s.equals("#")) {if (!s1.equals("#")) {return '
}else{return '=';
}
}if (s.equals(")")) {if (s1.equals("(")) {return '=';
}else{return '
}
}
三次作业之间的知识迭代关系:第一次作业考察的是代码的可扩展性,第二次第三次均考察到了数据结构,运用hashmap,set,栈来解决问题。在这三次作业中,我所花费的时间大约是1:3:1,在这三次作业中,我了解并熟悉了什么才是开闭原则,需求的改变使得一个程序必须要有可复用性,可扩展性,这样的程序才是令人满意的。map,list,set等数据结构可以更好地帮助我们处理数据并提高解决问题的效率。从中我也知道了,一个满意的程序要实现开闭原则,可扩展性越高,代码的寿命也就越长。
java课程学习的总结
在这几个月,通过网络课堂的学习以及在pta平台的作业下,我由原来的面向过程思想已经过渡为面向对象思想,熟悉了代码的测试,并且学到java fx 图形界面等知识。
(1)代码测试的重要性
一个程序需要考虑多种输入,多种情况,从此次java课程的学习中,我了解并熟悉了数据的异常处理,大数值的处理等。运用catch,try等处理异常数据,在输入的数据超过数据类型最大值时,例如输入的数据超过int型最大值。灵活使用算法解决,特殊情况需要特殊判定,例如除法中,分母为0的情况,闰年2月为2天,12月31日后一天等等。以及边缘测试,例如比如输入的范围是[0,1],可取0,1,-1,11作测试点。多次作业中都涉及到了数据的错误输入,如何判断以及输出wrong format,pta上的作业使我熟悉了如何对代码进行测试。
(2) 面向对象思想的理解
之前在学习c语言的时候是面向过程思想,在学习到java时,我了解到了面向对象思想,并发现面向对象思想与面向过程思想的不同以及它的优点。面向过程是单纯针对过程,一个一个步骤解决,通过各个函数实现,面向对象是把一个问题分为几个类。类中有自己的属性和方法,一个类做自己的事。面向对象思想可以帮助我们提高代码的可扩展性,实现高聚合,低耦合的特性。而且遇到中间要比较大的改动时,面向过程往往需要大量修改代码,而面向对象只需要根据模块选择需要改的部分修改即可。
(3) 关于面向对象三大技术特性的理解
关于这三大技术特性:封装性,继承性,多态性。封装性就是把一些东西封装成类,并用protected,private设置访问权限,一个一个的类体现了面向对象的思想。继承性使得每个类都有一些共性,子类可以有父类的方法,使得代码量有所减少。多态性是建立在继承性上的,多个类继承至同一父类,子类有着不同的动作,多态大多用于接口,使接口得以重用。
java课程的收获
(1) 关于从pta作业中学到的新知识
新知识就是面向对象的思想,三大技术特性的应用,并且了解到了一些算法,令我印象最深的应该是正则表达式了,几乎每一次作业都有,不得不说正则表达式可以快速解决一些字符串处理问题,以及判断输入的格式正确与否,用到最多的应该是pattern和matcher了。各种数据结构的用法,比如hashmap,栈。
(2) 在pta上得到的教训
第一个就是格式了,哪怕是一个空格也会报错,代码要精简,代码长且没有意义是没有用的,例如。 做题目一定要把题目分析完再做,比如题目给的输入输出规则,看解题报告,不然等于白做或者做到中间做不下去。
(3) 从java fx中学到的新知识
从开始的按钮设计到pane,几种box的学习,再到设计一个计算器界面,再到按钮事件,键盘事件,鼠标事件,将代码和图形界面对接,这无疑是我在此次java课程中的又一大收获,图形界面赋予代码新的灵魂。
关于对课程的建议
建议以后的pta题量像最后几次作业一样,题量可以减少。。