在第一次做业中,我设计了三个类 Parentheses、CurlyBraces、Test。java
Parentheses类,存储多项式中的每一项的系数与指数,具备将该项加入最终结果的方法。此类功能简单,规模在20行之内。正则表达式
CurlyBraces类,主要实现将输入字符串中的一段转换为一段多项式,同时将多项式中每一项调用Parentheses的方法,对最终结果进行操做,实现“加减”,具体规模在90行左右。编程
Test类做为主类,首先对输入的字符串进行格式审查,将合法字符串中的每个多项式提取出来,使用CurlyBraces的方法转换为多项式,再进行进一步操做,规模在60行左右。数据结构
——第一次做业函数
图中标红的getPara()方法代码长度有60行,主要是实现将多项式中的各个项提取出来,并将其加入到最终的结果中。在这里,我手搓了一个状态机实现将各项的指数、系数提取出来,致使代码长度过长,但我的认为,这里的逻辑仍是较为清晰的。测试
优势:使用正则表达式直接判断输入字符串是否符合格式,实现较简单。url
缺点:spa
因为对java各类经常使用方法没有了解,在将字符串中的数字提取成数字时,手搓的parseInt,形成代码长度较长;设计
未考虑正则表达式匹配时可能出现的问题,在对输入较长字符串进行格式审查时,有crash的风险;调试
类中的方法没有作到相互独立,加大了维护难度。
在公测时,没有经过压力测试的测试点,程序crash了。
在第二&三次做业中,设计了Elevator、ExpHandler、Floor、Request、Requestqueue、Scheduler、Main七个类。
各个类的属性和方法都设计的没有什么逻辑,这里就不具体分析了.QWQ
——第一次做业
——第二次做业
——第三次做业
在第二次做业的代码中,主要仍是按照解决问题的步骤一步步的实现功能,没有对各个类应当具备的属性和行为作进一步的思考。这也致使了在第三次做业基于此基础上继续添加功能时,代码逻辑变得极为复杂。在调试时,为了解决一个BUG,代码各个部分都须要缝缝补补,在这个过程当中,极可能一时疏忽就产生新的BUG。
在写第一次做业以前,我对面向对象的思想没有什么了解,在编程时仍是以实现功能为目的。严格意义上讲,第一次做业我提交的仍是面向过程的程序,或者也能够说是java格式的c程序。
在第二次做业中,调度器的功能较为简单,仅仅是按照输入的顺序执行指令,只是简单的写了个for循环遍历一遍请求队列就能够知足需求,代码规模也不算长。在编程时,将解决某些需求的方法提取出来,做为一个独立的方法,如去除字符串空格、检查格式、提取请求等,但因为在编程前没有对具体设计作出详细的规划,各个方法应当放入哪一个类中考虑不够周全,致使了各个类之间的逻辑十分混乱,并且仍是没有作到数据结构和函数的相对独立。
而在第三次做业中,因为容许捎带,指令执行的顺序就变得复杂起来,我仍是傻傻的按照我第二次的写法,没有将判断捎带、输出等各个功能写在独立的方法里,致使调度器类中一个主要的方法代码规模突破200行。在DDL前一天晚上,我发现了本身的一个BUG——当在同一层须要执行几条请求时,输出的顺序可能出现问题。面对冗长的代码,各类if-else if-else,在调试时,我遗忘了其中某个分支中相应语句的修改。最后还一顿使人智熄的操做,把调试过程里,测试用的printf尚未注释掉的程序交上去了.QAQ
互测又被发现了好几个BUG后,我反思了一下,第三次做业调度的逻辑比第二次的复杂许多,再按照我第二次调度器类的一个方法里实现不少个功能的写法来写,就将问题变得更为复杂,也会致使各类奇怪的BUG——
1.不以(FR,1,UP,0)开头时,判断的逻辑有问题;
2.同质请求判断,与电梯同层的指令判断同质时存在BUG;
3.一次开门响应多条请求时,输出的顺序可能不正确。
因为在第二次做业时就对问题抽象程度不够,程序的各个函数又不够独立,在第三次添加功能时,将一种状况的代码改了,另外一种状况的代码却忘了改。好比,我将判断指令是否捎带分为电梯上、下行两种状况,而这两种状况又是在调度器类中某200+行的函数中的一部分的功能,而在这个函数中,同时还包括输出等其余的功能。调试时发现一个BUG,在对一种状况的代码进行修改后,还须要同时对另外一种状况作出相应的修改,还要注意不要误改了实现其余功能的代码片断,这就极大地加大了调试的难度,还容易引起各类“神奇”的BUG。
DDL以后,实在是看本身的丑陋的代码不爽,就将第三次做业从新写了。重写以后的代码,基本作到了数据结构和函数的相对独立。
——重写后的第三次做业
虽然,还有不少不足之处,但较上一个版本,在程序设计和程序规模方面,都有不错的进步。
将实现不一样功能的代码段放进不一样的方法中
基本实现了对数据的保护
不足之处:
对捎带与否的判断逻辑可否继续简化, 但它真的有那么多条件啊
仍是存在某方法功能不够明确、代码巨长, 但我的又感受没有进一步拆分的必要
作程序设计前,仔细阅读指导书,多逛各个讨论区,对做业要求有更明确的认识,防止在编程过程当中反复修改代码;
在开始写代码前,先将程序各个类要实现的功能设计好;
必定必定要注意各个函数功能的相对独立,在一个类里某些方法实现的功能太多,调试时可能会付出巨大的代价。
最后祝你,身体健康【雾】,再见