面向对象初调用:foolish 电梯
本周我们完成的任务是傻瓜电梯的调度,对于那十分十分详细的指导书,我感觉想要说明白题目要求,是做不到的,所以就把指导书贴出来给大家看了,,由于在下还不会网页制作,只能通过百度网盘了,https://pan.baidu.com/s/12KLXnQa9ifh1hZQrvqhjAw/pdf争取下次用网页吧,虽然不知道什么时候才能学会。
看完题目我们开始分析吧,

从最直接的角度分析就是请求与调度的关系,直接点就是,发出请求,然后处理请求,将所有合法请求过程构成请求队列,调度器处理一个请求就是根据当前电梯状态发出一条指令,然后电梯运行该条指令,然后更新电梯的状态,然后返回状态只调度器,直到执行完最后一条指令。所以按照思想构造出五个类,但这次作业,在下并没有完全按照要求写,虽然是五个类,但是五个类的作用并不是完全按给出的建议。首先说一下几个类的功能:
- 输入我们使用主类,虽然输入是来自电梯类与楼层类,但是作为两处输入太过于麻烦,所以我们使用主类输入
- W_legal类,该类作为对于输入的第一层判断,也就是简单的过滤一些不合法输入
- Demand类,该类也是作为对于输入的判断,将所有不合法的输入过滤,得到是正确的请求队列
- Scheduler类,该类就调度器类,在该类中判断是否是同质请求,同时时间与队列是该类的关键的两个属性,时间用于判断当前类的请求时间与当前时间的大小,请求队列用于判断是否执行结束
- Elevator类,该类就是电梯类,接收来自调度器的指令,然后执行该指令,该类中的方法change()意思就是执行指令,然后改变电梯的运行状态,然后返回状态给调度类
对于该想法,本来我也觉得天衣无缝,只可惜还是有漏网之鱼,先列出自己的bug吧:
- 对于输入,我依旧采用了第一次作业方法,对输入使用find(),错误……,导致只要存在符合条件的输入就会执行,而忽略了必须是完全匹配的条件
- 对于数字的判断,题目的要求是4字节的整数,由于在java中是不存在unsigned类型的数据类型的,也就意味着,我们的数字最大位2^32-1,而不是2^31-1,所有数据类型要是long类型,我都是这么写的,但是还是错了,那么错误在哪里呢?本来在使用下面的这个方法时要注意一点时,一定要是有try catch,除非你事先确定了数据的位数
max = Long.parseLong("4294967295");
对于自己想法的优化:
- 最需要优化的地方当然是输入,所以第三次作业在下重写写了一个输入,具体见第三次作业,
- 如果还有什么要优化的话那就是代码风格吧
为了纪念自己第一次使用面向对象的方法来实现这个作业,容我贴一点核心代码
request_new.request_old = legal_1.num;
request_new.deal(); //得到一个队列,队列中是按时间顺序的请求都是合法请求
sche.request_n = request_new.request1;
sche.fetch();
while(sche.request_n[sche.i][0]!=0) {
sche.state_c = elev.state;
sche.stop_time = elev.st_time;
sche.deal_t();
elev.move = sche.instr_o;
elev.change();
sche.i++;
}
面向对象初调用:foolish 电梯的更多相关文章
- C#-面向对象——如何调用使用类 普通方法、静态方法的使用
类的调用使用 新建的类的命名空间与主函数的命名空间默认相同,如果不同,则主函数无法调用自定义类 比如: 只需要进行引用即可 如果不知道方法的类名,可以右键鼠标 → 解析 → using 即可 普通方法 ...
- TypeScript之面向对象初体验
1.安装nodejs和vscode: nodejs : https://nodejs.org/en/ Visual Studio Code : https://www.visualstudio.co ...
- python_92_面向对象初体验
class dog: def __init__(self,name): self.name=name def bulk(self): print('%s汪汪汪!'%self.name) d1=dog( ...
- day24:面向对象设计与面向对象编程、类和对象
一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...
- python 面向对象学习
------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...
- Python第六章 面向对象
第六章 面向对象 1.面向对象初了解 面向对象的优点: 1.对相似功能的函数,同一个业务下的函数进行归类,分类 2.类是一个公共的模板,对象就是从具体的模板中实例化出来的,得到对象就得到一 ...
- 10 . Python之面向对象
面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向对象初识别 面向过程v ...
- OO第二单元电梯作业总结
目录 目录一.第一次作业分析设计策略基于度量分析程序结构二.第二次作业分析设计策略基于度量分析程序结构三.第三次作业分析设计策略基于度量分析程序结构四.分析自己程序的bug五.发现别人程序bug所采用 ...
- Python基础入门(6)- 面向对象编程
1.初识面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本篇随笔将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象 ...
随机推荐
- HDU - 5961 传递 想法,bfs
题意:给你一个有向图,满足去掉方向是完全图,将其拆成PQ两个图(没有公共边),问你两图是否分别满足对于任意3个点a,b,c 若有一条边从a到b且有一条边从b到c ,则同样有一条边从a到c. 题解:观察 ...
- Oracle核心技术之 SQL TRACE
1.SQL TRACE说明: 参数类型 布尔型 缺省值 false 参数类别 动态 取值范围 True|false 2.类型 1)sql trace参数:alter system改变对全局进程影响,如 ...
- ionic 相关问题解决办法记录
1.npm无法安装模块 报code E400错误 解决办法: 删除npmrc文件. 注意:不是nodejs安装目录npm模块下的那个npmrc文件,而是在C:\Users\{账户}\下的.npmrc文 ...
- li设置float后ul无法包裹li问题解决
解决办法:灰常简单,只需给ul添加样式 ul{ overflow: auto; } 即可
- linux平台mysql密码设破解
1.先停止mysql服务 service mysqld stop 2.启动mysql服务 并跳过权限认证 mysqld_safe --skip-grant-tables 3.打开另外一个终端 登录my ...
- js-jquery-对象与JSON字符串互相转换
1:jQuery插件支持的转换方式 代码如下: String→Object$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转 ...
- csv文件的读写
# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. "&quo ...
- [py]python自省工具
参考 在日常生活中,自省(introspection)是一种自我检查行为.自省是指对某人自身思想.情绪.动机和行为的检查.伟大的哲学家苏格拉底将生命中的大部分时间用于自我检查,并鼓励他的雅典朋友们也这 ...
- poj2063 Investment
http://poj.org/problem?id=2063 首先总结一下:总的来说通过这题我深深感觉到了自己的不足,比赛时思维很受限,...面对超时,没有想到好的解决方案. 题意:给出初始资金,还有 ...
- [LeetCode] 38. Count and Say_Easy
The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 1 ...