OOP作业总结(一)
一前言
题目集一
•知识点: 数据类型的转换、选择与循环结构、String当中字符串的字符 个数获取方法int Length()、当前字符串与参数字符串的拼接方法String concat(String str)、获取指定索引位置单个字符方法char charAtint index)、查找参数字符串首次出现索引位置int indexofString str)、字符串的两个截取重载方法String substring(int index)与String substring(int begin.int end)、将当前字符串拆分成字符数组作为返回值方法charD toCharArray()等等与字符串相关的方法。
•题量:  7-1~7-12 共12题题量较大
•难度:  7-1~7-4为年利率、BIM测算、双循环九九乘法表、快递运费之间的四则运算与输出数据类型的类型转换。代码较为简单,题目难度不大,但有些地方花时间较少没有通过编译器修改导致部分正确得分较低。
7-5~7-8为字符串的相关操作,难度适中,如下:
 
7-9_7-12中7-10GPS数据处理、7-11求定积分两道题目难度较大。
题目集二
•知识点:基本选择结构、方法格式、求绝对值的Math.abs()方法、方法返回值类型为boolean类型的方法编写、判断字符串是否相等的equalIgnoreCase()方法。
•题量:7-1_7-9 共9题,题量适中。

•难度:7-1-7-7难度较低为字符串处理与基本选择结构、基本四则运算。7-8、7-9两题题目难度相对前面较大。7-8判断三角形类型难在判断条件之间的关系。7-9求下一天对自己而言是当时不太清楚方法返回值类型为boolean类型应该怎么处理,现在看来难度不大。
题目集三
•知识点:标准类和对象的创建与使用(private this关键字、构造方法(有参与无参)、私有属性的getter setter方法及其他成员方法)、对象类型作为方法的返回值、对象类型作为方法的参数。
•题量:7-1-7-4 共4题,题量较少。

•难度:7-1-7-3难度不大,7-4日期类设计难度较大,刚开始对对象类型作为返回值、对象类型作为方法参数理解不够以及各个方法之间的调用关系没有捋清导致此题得分低。
二、设计与分析
题目集三 7-3
类图:

圈复杂度:

解题心得:本题难度不大,是标准的类的基本形式。在学习完类与对象的基本知识体系后便有很清晰的思路,在提供 int mon_maxnum[ ]数组存放每个月最大天数后就思路愈发清晰。我的个人解题思路是先浏览类图,看类的数量。编写出Date类中基本结构(year month day三个私有属性、Date的有参无参构造方法、year month day的getter setter方法),再编写boolean isLeapYear(int year) 、boolean checkinputValidity()成员方法,最后构思怎么实现求下一天方法。1、起初不清楚boolean类型作为方法返回值怎么处理,在看书和相关视频学习后学习到此类方法可以有两种返回方式:一是定义一个变量在某条件下返回true、false;二是直接返回式子。2、面对getNextDay()没有参数表列选择了使用this关键字处理。3、整体思路比较清晰,提交后出现闰年二月底测试点答案错误。检查代码发现是mon_maxnum[ 2]=28,无法实现闰年二月29天,思考后在getNextDay()加入闰年的判断,如果是闰年就立即mon_maxnum[ 2]=29,而当为平年时不执行该语句仍旧为28天。
题目集三 7-4
类图:

圈复杂度:

解题心得:此题难度其实也不大,当时由于没有理解对象类型作为返回值、对象类型作为方法参数以及boolean compareDate(DateUtil date) boolean equalTwoDates(DateUtil date) int getDaysofDates(DateUtil date)之间的关系不清晰导致代码没有写完。事后通过对对象类型作为返回值与参数的完整学习重写了代码有了更深刻的理解。
三、踩坑心得
题目集三 7-3
1、关于多层嵌套出问题,写着写着丢了情况,导致大月测试没过,检查代码后补充情况。此后遇到循环结构较多的题目可以适当注释以免自己写着忘记其他情况,检查代码逻辑通常花时间较多,适当的注释可以提高修改效率也便于他人的阅读也可以使自己。
2、补充情况后闰年二月底测试答案错误,在检查代码在取得下一天方法中增添了判断为闰年便使mon_maxnum[2]=29,改后代码如下图:
void getNextDate(int year,int month,int day){ if(this.mon_maxnum[this.month]>this.day){ this.day++; } else if(this.month<12&&this.mon_maxnum[this.month]==this.day){ this.month++; this.day=1; } else if(this.month==12&&this.mon_maxnum[this.month]==this.day){ this.year++; if(isLeapYear(year)){ this.mon_maxnum[2]=29; } else{ this.mon_maxnum[2]=28; } this.month=1; this.day=1; } } }
答案正确如下:

题目集三 7-4
1、这道题做得比较糟糕,主要原因是在学习类与对象时没有系统地把基础学完而是挑着看。这就导致自己完全不知道对象类型作为返回值、对象类型作为方法参数应该怎么处理,这样就不知道这些方法在没有参数表列时应该怎么传参、怎么返回,也无法理清各个方法之间的调用关系,最后导致的就是思路混乱。吸取教训后我认识到学习要系统,要把相关的知识点完整地看完,知识点之间是相互关联的,不然面对题目就是事前抓耳挠腮,事后懊脑不已。
2、在学习完对象作为返回类型、作为返回参数后重写代码,出现错误:

原因为缺少返回语句最后一句return check1;,如图为补上后的代码:
boolean compareDates(DateUtil date) {//是第一个进去的year boolean check1 = true; if (year > date.getYear()) { if (month > date.getMonth()) { if (day > date.getDay()) { return check1; } } else { check1 = false; return check1; } } else { check1 = false; return check1; } return check1; }
四、改进建议
(1)、写代码时有时候不用完完整整地按照生活中的常规想法去思考,而是可以抓住特定的某个分割点,这样可以简化代码的复杂程度,使代码更易被他人读懂,自己的思路也相对没有那么复杂 。
(2)、对于反复执行的片段可以考虑是否能设置条件从而改成循环,使代码更为简洁。
(3)、在多层嵌套时写上一定的注释便于自己写不同的分支。
五、总结
1、知识点上:
(1)、数据的输入输出格式:有数据的强制类型转换、数据输入输出的小数位数。
(2)、在一系列关于字符串的获取、查找、拼接、删除、拆分中认识学习到int Length()、String concat(String str)、char charAtint index)、int indexofString str)、String substring(int index)、String substring(int begin.int end)、charD toCharArray()等等与字符串相关的方法。
(3)、学习到一个类的基本结构包括成员变量、成员方法。成员变量有(public protected default private)等修饰符,不同的修饰符约束着访问的权限,带有private修饰的每个属性需要构造setter getter方法才能被该类以外的类使用。除此之外,还学习到含参与不含参的构造方法,构造方法方法名与类名一致。
(4)、较为完整地学习了基本的方法结构,学习到boolean类型作为方法返回值以及对象类型作为方法返回值、对象类型作为方法参数。这是我认为最为重要的一点。
(5)、学习到this关键字以及通过对象调用方法应该怎么调用。
2、学习方法上:
(1)、对于多层嵌套的问题应当考虑好各种情况,为减少犯错可用注释提示自己。
(2)、应该系统地把对应的知识点学完再去做题,不然想法很多,然而都是猜测出来的做法也不怎么相信自己。想法多了就越容易混乱。所以一定要把对应的知识体系在脑子里架构起来,面对题目会有比较切确的想法,做起来也更得心应手。
3、进一步改进:
(1)、感觉时间比较挤,可以多花时间或者提前学习java后面的内容,使对一些难点理解更全面。
(2)、代码可以不断进行优化。
4、对课程、作业、实验的建议:
(1)、如果有时间希望老师能讲讲题目的分析。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号