第一次作业
前言:
知识点:1.正则表达式2.对类的封装3.ArrayList列表的运用4.枚举的运用5.类的设计6.单一职责的运用。
题量:题量不多。
难度:电梯难度偏大。
设计与分析
以下是对电梯调度程序的重点分析:
题目集五:
类图:
报表
我看了这次的代码分析结果,感觉收获还挺多的。
代码规模和结构
这个文件有 293 行,包含 183 条语句。我能感觉到这个代码量不算小,但也不是特别庞大,语句密度看着还可以,不是那种松松垮垮的。再看看代码结构,有 4 个类和接口,平均每个类有 3 个方法。这说明我写代码的时候还是有点模块化意识的,把不同的功能拆到不同的类里了,不过每个类里的方法不多,看来我当时功能划分得挺细。
代码复杂度方面
代码里分支语句占了 35.5% 。说明我写的代码里条件判断特别多,要根据不同的情况做不同的事儿,业务逻辑有点复杂。还有方法调用语句有 142 条,方法之间互相调用挺频繁的,虽然这样能复用功能,可我也担心调用的层级太多,以后自己看代码的时候都绕晕了。
Elevator.processRequests() 这个方法复杂度达到了 34 ,还在 95 行。这肯定是代码的核心部分,估计当时写的时候就费了不少劲,现在要再去维护它,也得花大精力好好研究研究。代码块最大深度到了 7 层,嵌套得太深了,这代码读起来肯定费劲,要是改代码的话,一不小心就可能出错。
注释情况
带注释的代码行才占 5.8% ,注释太少了。当时写代码的时候可能光想着实现功能了,没咋顾得上写注释。现在想想,以后要是别人看我这代码,或者我自己过段时间再来看,肯定得一头雾水,不知道这代码到底啥意思。
图表分析
那雷达图能让我一下子看到代码好多方面的情况,像注释比例、每个类的方法数、平均每个方法的语句数啥的,能很清楚地知道代码哪块表现好,哪块还得改进。柱状图能让我了解不同语句数量的代码块有多少,对代码块的大小分布有个直观的认识。
心得体会
通过这次分析,我深刻认识到代码结构和复杂度管理太重要了。模块化确实能让代码更好管理,但复杂的方法一定要处理好,不然就是个大麻烦。注释也不能偷懒,得好好写,这样以后维护代码才轻松。而且这些分析工具真的挺有用,能从不同角度让我了解代码质量。以后我写代码的时候,得多用用这些工具,早点发现问题,把代码优化得更好。
题目集六:
类图:
报表:
代码解释
首先,这文件有 208 行,包含 139 条语句,代码量不算小呢。就行数和语句数来看,说明它承担的功能应该挺多、挺复杂的。
从结构上看,这里面只有 1 个类,可平均每个类有 11 个方法,平均每个方法还有 11.36 条语句。这意味着这个类里方法不少,而且每个方法的逻辑可能也不是特别简单。
再说到复杂度,分支语句占比达到了 42.4% 。也就是说,这代码里条件判断特别多,要根据各种不同的情况做出不同的处理,业务逻辑肯定错综复杂。方法调用语句有 171 条,这说明方法之间的相互调用非常频繁,虽然能实现功能的组合和复用,但也容易让代码的逻辑变得混乱,不太好理清。
最复杂的方法是 Controller.processRequests() ,在第 28 行,复杂度高达 34 。最大代码块深度为 7 ,存在比较深的嵌套结构,这会让代码特别难读懂,要是后期修改,一不小心就容易出错。
还有个大问题,注释比例是 0.0 ,我当时写代码的时候,肯定是太专注于实现功能了,完全没顾上写注释。现在想想,这可给以后的维护和理解带来大麻烦了,不管是我自己以后再看,还是别人接手,都得费老大劲去琢磨代码的意图。
看看那两个图,雷达图能让我直观地看到代码在各个维度的表现,像注释比例、每个类的方法数、平均复杂度等。柱状图展示了不同语句数量的代码块分布情况,能看出代码块的规模分布还挺广的。
心得
通过这次对 Controller.java 代码的分析,我收获满满,也深刻认识到了自己代码的不足。代码结构和复杂度管理真的太重要了。虽然我把功能拆分到了多个方法里,但复杂度高的方法和过多的条件判断,还是让代码变得难以理解和维护。注释的缺失更是个严重的问题,以后写代码,一定得养成及时添加注释的好习惯。
这些分析数据和图表真的帮了我大忙,能从各个角度反映代码的质量情况。以后我写代码,得多借助这些工具,早点发现问题,及时优化代码,让代码更清晰易懂、更便于维护,可不能再给自己和别人挖坑了。
踩坑心得:
在写代码时具体遇到了以下几个坑
1.在考虑电梯运行逻辑时,没有考虑到当外部队列或内部队列为空的情况
2.在考虑电梯运行逻辑时,刚开始并不知道是将每个队列的头部进行比较
3.在考虑电梯运行逻辑时,并未考虑到要先考虑方向
总之在考虑运行逻辑时没有考虑周全。
4.
不知道为什么总是运行超时。
后面发现原来时我的循环有问题,修改之后就好了
看到答案正确也是爽了
改进建议:
有以下几条
1.增加注释
2.优化请求逻辑
3.增加边界条件检查
总结:
学到了对正则表达式的运用,对类的封装,最重要的还是面向对象的原则:单一职责原则。
对于类的设计还需进一步研究,并且一定要写注释。除此之外我的打字速度还需进一步提升