caon

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

OO前三次作业总结

 

第一次题目:

1.01计算年利率

1.02身体质量指数(BMI)测算

1.03九九乘法表(双重循环)

1.04: 快递运费

*1.05去掉重复的字符

*1.06统计一个子串在整串中出现的次数

1.07有重复的数据

1.08:从一个字符串中移除包含在另一个字符串中的字符

1.09Prime Numbers

1.10GPS数据处理

*1.11求定积分

1.12: 列出最简真分数序列

第二次题目:

2.01长度质量计量单位换算

2.02奇数求和

2.03 房产税费计算2022

*2.04游戏角色选择

*2.05学号识别

2.06巴比伦法求平方根近似值

2.07二进制数值提取

*2.08判断三角形类型

*2.09求下一天

第三次题目:

3.01创建圆形类

*3.02创建账户类Account

**3.03定义日期类

***3.04日期类设计

 

前言:

前三次作业难度逐渐加大,题目量逐渐减少。题目之间互相有联系,比如2.093.033.04。在知识点方面,随着题目的更替,知识点也在更替,新的作业伴随着新的知识点的出现。前两次作业主要是一些算法和基本的语言使用,主要目的是让我们适应Java的编程,尽管是第一次学Java,但有之前学习其他语言的基础,做起来还不是很困难,但在做的过程中还是感受到了Java这种面对对象的程序设计和之前所学习的面对对过程的程序设计还是不一样的。主要是思维方式的不同。而第三次作业的后两题难度就上升了,第三次算是对前两次的一个总结和提升,难度就一点高了。

本次总结主要从以下几个方面进行:知识点的归纳,重点题目分析,错误集合,改进见解,总结。

 

知识点归纳:

控制台的输入输出,1.011.02为代表。

判断和循环语句,1.032.042.05为代表。

判断和循环语句的嵌套使用,50%的题目涉及,并且为重点和难点。

String类型的方法,1.051.08为代表。

Math类的方法,2.081.11为代表

类的构造使用:第三次题目都涉及。

重点题目分析:以结合代码和powerdesigner的形式进行。相同类型的用其中的一代码进行分析。

 

 

 

Powerdesigner:

 

 

 

Sourcemonitor:

 

 

 

分析1.05去掉重复的字符题目难度不大,主要运用了选择循环的嵌套使用,和Java中的获取子字符的方法。做题的思路也比较顺畅,用flag去标记重复元素。随后输出不充分的元素。这题的综合性比较强,运用的方法和思维是简单的,但都是很经典,以及用的次数很多。后面的难题也差不多是基于这种思维方式,只是对他们进行复合和升级,这也是分析这道题原因。

 

 

 

 

 

 

 

分析 **3.03定义日期类该题的难点在于一些边界值和闰年的界定,特别是月份和年份结合。在每个月份中的最后一天,每年的最后一个月,闰年的二月最后一天的判定,还有一个容易忽视的点在于月份不能超过12,因为最开始定义的数组是一个13大小的数组。我就在这吃了亏,把所有的注意力放在了112月忽视了数组越界的问题,这个也导致我在测试时忽视了这一点导致,题目一直没过。解决方法其实很简单,如下:

 

 

 

 

 

 

 

 

分析:***3.04日期类设计 前三次最复杂以及是前几个作业的集合。其中包括了上一道题的思路,但它有所拓展,比如后N天,以及两个日期相差的天数,后N天计算在思路上是虽然和之前的差不多,就是多了一个循环,但这个循环很不同。在相差天数方面,实际上就是变相的后n天或者前N天,没什么好说的,就是去写一个判断日期前后的代码。重点就在与后N天的计算,如果n的值过大的话,按照上一道后1天的思路,天数加1,判断相应的月和年,最后的答案尽管不会错,但N很大的话,循环会不断的进行,哪怕循环一次用一毫秒,最终所花的时间也会非常的长。这就是这个循环不同的点,这也要求了我们在编写程序时,要注意代码的质量,要去优化自己的代码。优化的方法有很多,比如对n进行365的求余和取整来简化循环中的n,让进行后n天的循环的天数尽量减少。我的方法是以四年为一个单位,如果起始的n过大的话,用1461进行简化。如下:

 

这样n就进行了缩小,把n的值降到1461以下,就算不是最简的N但也算把代码效率提高了不少,

 

错误合集:

1数组越界问题,这个问题你注意到了,就很好解决,但如果从一开始就忽视了这一点的话,那么在后面的检测中你也会忽视这一点,导致你的检测的结果都不会错,让你误以为是其他地方的错误,那你就掉进了一个深渊之中。

2if语句中条件的忽略,在if中一个条件的忽略,典型就是在判断三角形类型中,我先把三边进行排序,等腰三角形的判断,第一个让人想到的是两个短边相等,而第二个就容易忽视就是最长的边和第二长的边相等。因为已经进行了排序,所以给人了一个固定思维,最大边不会和后面的两个边相等,特别考虑的是等腰三角形。所以在if语句中一定要考虑全面,

3数字精度的问题。在Java中的double float 数字类型中要想相等有时并不是单纯的等于号,而是要考虑两个数值相减的决定值小与0.00001或者其他精度。

4注意题目的条件。血的教训在3.02创建账户类中计算月利率的公式,余额*(年利率/1200)其中的的括号极其重要,如果没有就是余额先乘年利率再除1200,那么结果就会出错。但最恶心的是它有时候的值是正常的,怎么样这谁想得到,就这个错误让我找了好几天,其中我一直认为是我程序哪里的逻辑出错了,我因此在其中换了好几套方法。一个括号的重要性体现了出来。

 

 

改进建议:

1变量名的设置。如果程序简单的话变量名的重要性没什么体现。但一旦程序复杂的话,变量名就重要,特别是在3.04日期类设计中,涉及较多的变量,而我自己的变量名设置的不是很好,这一点如果没做好,那么在后面的学习中,程序越来越复杂,各个类和各个方法之间的调用越来越频繁,如果变量名没办法做到见名知意的话,这就会让自己的思维变得混乱,非常不利于程序的编写,并且对于程序的美观和整齐也不好,会显得非常业余。

 

2对于循环的依赖要降低,学会优化代码,以及提前的程序设计。循环对于程序来说就是把双刃剑,控制不好循环条件对于程序来说就是负担,让程序卡死。

 

 

从以上程序就可以看出如果没有对N的化简那么后面的循环就会卡住。而对我自己来说作为一个新手,对代码的优化其实并不是很擅长,而其中最明显的体现就是循环。而代码的优化应该从开始时就要思考出较为好的代码,设计出好的代码结构,这也时我以后学习的重点学会设计自己的程序,这点的重要性不低于程序的编写。

3数组使用要更谨慎。以3.03来说就一个数组越界的错误,可能会让自己困扰很久。对以后的学习来说,我可能要更多的使用ArrarList去代替数组.ArrarList在我的理解来说就是升级版数组,它的使用更加灵活和方便。以此也引出了一个学习的方向就是更多的去了解Java其中的方法和类,其中有些方法对与代码的编写来说是非常方便的(其实304可以调用Java其中的一个类直接计算后N天的日期,可惜不让用,它的思路是把日期和N天都换为相应的毫秒数,最后直接相加,它的类中也有把毫秒数换成日期的方法,可能有错,可能这个类中还有方法,我理解的不多,因为不让用。)

 

总结:

第一次学习Java,自己在编写程序的过程还是遗留了之前编写其他语言的痕迹。该的不是很彻底通过前三次作业,主要是学习和了解Java的编程,改变一些以前的编程习惯。学到了一些类的方法使用Math,String等,以及new的部分使用。class的构造和使用的方法的编写。自己还要对Java当中的方法进行更多的学习,除了书本上的,Java本身有大量的类,由前人以经写好的,那些方法很方便,自己要更多去拓展自己的视野。我认为Java的学习需要更多沟通,与其他人的思想进行交流,Java的自由性是很强的,可以让每个人的想法都实现出来。沟通也是种学习方法,学习别人的长处来弥补自己的段板,特别是Java其中的方法有很多,别人可能知道你不知道。对于课上的话,我其实是很希望老师能多介绍一些Java中的方法,哪怕不用过多的介绍,并且课堂的讨论可以更多一点,课堂可以随机发布一些问题让我们去思考和讨论,或者在课堂上加入一些实际的案例和程序来进行讲解。

posted on 2023-03-25 20:54  caoon  阅读(0)  评论(0)    收藏  举报