代码改变世界

【第四次作业】OO前三次作业总结

2018-04-04 15:45  小削  阅读(199)  评论(0编辑  收藏  举报

作业1:多项式加减

第一次作业要求为按照输入的字符串标准格式进行多项式运算并输出,可以看作是字符串操作的题目,在写之前只学习了java一些基本语法和库函数,将输入的表达式按照正则表达式判断符合格式后去空格,并按“}”分割后提取各项的指数与系数分别存储于数组中,如果多项式前为负号,则在提取系数时对值取反储存,最后进行同类项合并,指数相同的项系数相加,对两个数组进行选择排序并合并同类项,之后按照格式输出。

在C语言编程的过程中处理思想不变,但C语言不提供正则表达式,所以又动手回顾了有限状态机的内容。

第一次作业主要存在的问题是对对象概念没有深刻的认识,将所有输入的多项式看作一个对象,更好的实现方法是将单个多项式看为一个对象,初始化为0将每一个输入的多项式与之进行加减操作,加减操作可以构造为多项式对象内的方法,在之前的编写过程中,写出来的JAVA程序更像是一个面向过程的程序。

作业2: 单部傻瓜电梯
本次作业要求根据输入的请求序列调度电梯,根据指导书提示,设立五个类:请求类、请求队列类、电梯类、楼层类、调度器类、主类为电梯调度类,在具体实现上,主类中主方法通过正则表达式匹配两类请求,用errcode变量记录输入的错误类型,对错误输入使用主类中ErrorHandle方法处理。
主类调用请求类构造方法处理输入的字符串得到请求,每一个请求对象均包含请求的信息,请求队列类中AddRequestQueue构建请求队列,电梯类中电梯对象包括当前所处楼层与完成当前请求的时间,
创建好请求队列后遍历,调度器类使用Schedule方法处理当前请求,之后用Positionning方法判断之后的请求队列是否存在同质请求,若为同质请求则将该请求的数据成员flag标为1,遍历时忽略.
完成程序后,一个最大的问题在于楼层类应该如何实现,在当前程序中,楼层类中只存在数据成员,三个数组 a[10] UP[9] DOWN[9] 分别代表电梯内十个楼层按钮、电梯外1至9层9个向上按钮、电梯外2至10层9个向下按钮,设想是通过这些int型变量的值代表这些按钮当前是亮或暗,在处理请求时,若当前请求要按下的按钮已经为亮,则该请求同质,从而在判断同质请求时减少算法时间复杂度。
然而...由于拖延症的缘故,导致楼层类没有实现,仅仅定义了数组,食之无味,这应看作是重写的动力之一..
在测试阶段,公测和互测中共暴露出5~6个BUG,问题集中在控制字符串输入与终止,正则表达式匹配前+号,前导0,楼层范围下限,最低楼层不得向下,最高楼层不得向上

作业3: ALS电梯
本次作业的要求是在第二次作业的基础上添加电梯捎带功能,工作量主要在于调度器类的子类Override类中捎带功能的实现,使用该类中pass方法,参数包括请求队列、当前请求下标、电梯、请求数量,判断是否捎带时用了很多重if,并设置GAP变量来表示在捎带当前指令前捎带其余指令的开关门时间,为判断捎带,在电梯对象中增加了数据成员BeginTime表示电梯开始执行当前指令的时间,请求类对象中flag变量为2时代表该请求被捎带,为1时该请求为同质。
在处理请求时,先判断当前指令后可捎带哪些指令,然后处理该指令,最后判断同质。
这次作业在公测与互测部分共暴露8个BUG,主要的问题在于对捎带的处理上,输出时没有按照时间顺序,由于是通过遍历当前指令之后的指令判断是否捎带并同时处理,输出按照指令顺序,应通过构造捎带集的方法来处理捎带,在构造的同时将被捎带指令按被捎带完成的先后顺序排列。

总结与回顾:
在前三次作业中,最重要的是通过编写java程序体会到面向对象编程思想的魅力,将程序中的问题分解,通过其间的信息传递与行为,编程的思维性与编写过程变得更吸引我,另一方面,类与对象的命名与编写还改善了自身的代码风格。同时也反映了自身的问题,使我更加认识到程序设计思路的重要性,构思严密一气呵成的程序可以规避很多问题,对java程序的许多语法还需继续了解与熟悉。