第一次博客总结

第一周题目集

  第一周的题目都比较简单,主要问题就是卡在了最后一题7-8的判断三角形上,其中有一个测试点一直过不去,后来发现是因为准确度不够。题目本身涉及到的原理其实简单,仅仅只是对三角形类型的判断,但是在直角三角形的判断上有一个坑,导致我卡在这好久。题目要求是判断所给出的三个数字是否可以构成三角形以及是怎样的三角形题目涉及到了对数字的开方和平方,所以如果不注意计算机对数字的处理会极大影响结果的判断。在考虑到这个问题后,我对判断开方后两边与第三边的关系进行调整才得以通过测试点。在今后的编写代码中一定要注意数字关系的判断。右边是先关的复杂程度图,还未使用到类,而且还大量使用到了if语句导致复杂程度高达19,这些都要在以后的代码中减少。在我的设想里,如果要优化代码,可以对判断输入是否构成三角形声明一个类,然后对每一种三角形的判断设定类,这有利于未来对功能的增加以及代码的优化迭代。在面向对象中,我们要时刻谨记面向对象是需要有优化的,所以类的使用必不可少,迭代十分重要。而且我还在代码中大量使用的if语句也应该呗摒弃,这不利于代码的实现效率,多个if语句会导致代码更加难以读懂,其实我还可以使用switch去代替多个if,这有利于代码复杂程度的降低。所以在未来的代码中我会更加注意复杂程度的重要性。

 

第二周题目集

   第二次题目集里主要都是与计算日期相关内容。题目集的难点在于对时间的确定以及非法输入的判断。由于是第一次写非法输入的代码,所以不太熟练的又使用了if语句对输入进行判断。因为我不会搜练的使用Boolean类型,所以在试着使用类是我运用了int类型定义了a来判断输入是否让a改变,由此返回输入是否合理,也由此使用了大量的if语句去做判断。在下一次的作业中我也去学习着用boolean去判度,发现复杂程度有了大幅度的下降,对于代码的简洁性有不少提升。除此之外,对于7-4求下一天,我这总结对一些特殊的日期去用if语句进行判断,普通的日期则直接加一。综上所述,我便使用了大量的if,使得复杂度特别高,而且在下次使用当中我也是如此。

 

 

 

 

  其次就是下一题,题目是输入日期以及前或后几天的数目,计算日期。对于7-5,如果我提前做这一个,这7-4就会相对简单。由于没有先去预览以及对功能延伸的思考,导致在写7-5时要推翻7-4的做法重新去编写7-5.在写7-5时我使用了一个数组去方便了非法输入的判断,减少了之前7-4if语句得使用,用month去查看输入得日期是否合法。而在计算日期得时候也加入了数组,运用数组去计算相差得日期,在语法上以及逻辑上,我的思路没有任何错误,但是在实现时却总是有两个测试点我无法通过,而且在多次的检查中我始终没有找到原因。最后我也是放弃了修改,所以这周的题目集我并不是满分。但是在今天写博客时才发现,当初的错误其实特别低级,我将带入的参数名写反了,月份和几号的顺序在写入相关类时输反了,而老师的测试点一般都是12号以内,所以我过了一部分测试点。现在发现着实觉得特别可惜,以后的作业中我一定要更加的严谨认真。这里的复杂程度也还是特别高,在下一次的作业里我也有了大幅度的改善,不同的使用类可以减少好多运算和代码。

 

 

上方时复杂程度图,我的问题还是大量的使用if。不过相比7-4,这里的平均值显然要有所改善,以后也要尽量的优化代码,减少if的嵌套和频繁使用。如果下次再对日期相关的题目进行编写,我会尝试将日期的增加减少单独放在一个类里,让Main里只有对其他类的调用,减少类间的耦合性,使代码更加利于未来的优化。

 

第三周题目集

 

  第三周的题目集涉及到了许多新知识,坑点也特别多。7-1相对而言对我们来说已经没有难度了,大多数代码还都是自动生成的。而7-2则算是我们的老朋友了,在上一周饱受折磨之后,第三周看到要求用类来实现,至少思路是十分清晰的。根据要求定义了data类并且进行了封装,其中的具体方法与之前相似,但是相对而言,由于由于意识的去减少复杂程度,所以代码就写得更加清楚明白,思路清晰。具体实现起来也简单了不少,这让我明白,写代码其实如果善于思考,可以让程序实现的更加轻松,效率也更高。下面是代码的复杂程度,可以看到复杂度已经大大的减少了。在发现了使用类可以减少代码的复杂程度后,我会在今后的编写中更加大量的去使用,让我的代码更加简洁。对于同一个题目,如果使用了不同方法,代码的使用行数是会有特别大的区别的,我们要多去思考,由此来减少代码的复杂程度以及运算容量。

 

 

下面是7-2相关的关系图:

 

 

 

 

 

在图中可以清晰的知道代码的编写逻辑,在我以后的代码编写中,我不能再像之前写c语言代码一样直接开始编写,我也可以提前去构思,想好要建立几个类和几个方法去减少时间的浪费,同时也要注意代码之间耦合程度,为未来的迭代做准备。类同时也让代码变得更加简洁。

  最后,一直困扰着我的便是7-3,这道题目需要使用到正则表达式去判断非法输入以及数字的提取,再学习正则表达式上我就花费了大量时间,其次我还在7-2上花费了大量时间去构思,这导致我并没有足够的时间去完成7-3.我只是进行了对功能实现的构思,题目的目标是求多项式幂函数求导。我只完成了用正则表达式对非法输入的判断,其他的功能只有一个大概的思路。我的大概思路是利用正则表达式将每一项中的每一个部分包括系数,参数提取并且用链表保存,用一个类实现。然后定义一个方法去完成相关的计算,最后定义一个方法输出。由于要求里的内容单一,所以为了以后的迭代,我还应该用一个类去控制相关算法的使用,以此来减少耦合程度,使得迭代中改写的代码尽量少些。对于上述思路,由于时间不够,我只是定义了类,还没有实现,在下次的作业中我会将其体现出来进行实现。

 

上方只有非法输入的实现,复杂度比较低。同时,由于时间安排的不合理导致了我这个星期没有完成安排的任务,以后的学习里我一定要合理安排时间,不能再出现这种问题。

总结

  在初步学习了面向对象后我意识到了面向对象绝对不是简单的JAVA学习,思路对于这门学科是特别特别重要的,平时的代码中我们一定要注意对数据的封装。同时,软件功能是不断迭代的,所以耦合程度是对于一个优劣程度评判的重要标准,我们要在编写代码时时有意识的去减少代码间的耦合程度,使用一个中间类去控制可以大幅度减少耦合程度,这对于未来的迭代特别有用,虽然在编写时看上去可能有些鸡肋或者是说多此一举,但是未来改写时每少写一行设置少一些代码的重写都是考虑迭代的功劳。

  除此之外,我发现在写代码时必须要有清晰的思路,千万不能稀里糊涂的走一步看一步去写,那样只会造成我第二周7-5时的悲剧,在一次次检查代码,一次次绝望中却很难知道自己错在哪里,因为大家都不会认为自己会犯如此低级的错误。在以后的代码编写前我都会去体现思考一下思路或者是去将思路画出来帮助自己理解,当思路清晰时才可以知道自己要建立几个类,写几个方法,以及如何减少复杂程度。

  另外,学习C语言时的坏习惯我也会努力去改,编写代码时我总是喜欢使用if语句,如果if里进行了嵌套那就是将复杂程度以指数形式增长,这明显不利于代码的简洁性编写。在以后编写代码时我一定要规避对if语句的使用,在实际情况允许的范围内寻找最优的逻辑去编写代码,平时多思考,要让我的代码尽量的变得简洁。

  最后,代码的书写不可或缺的就是封装性,我们学习的是面向对象,用户不需要知道我们的算法是如何实现的,仅仅需要的只是如何使用,这就要求我们对属性进行封装,这也有利于代码的安全。现在的代码对于面向对象的体会不大,但是我觉得在以后的代码中,面向对象一定会体现出与基于对象的区别。

 

posted @ 2021-04-04 23:45  I&R  阅读(51)  评论(0)    收藏  举报
Live2D