OO电梯作业总结

OO第二单元的三次作业主要是完成一部电梯,利用线程的相关知识,实现并发。三次作业难度递增,先是一部傻瓜电梯,而后是一部可捎带电梯,最后三部可能换乘的电梯。下面是我写完这三次作业的一些感受。

1.程序结构分析

(1)第一次作业:比较简单,实现一部傻瓜电梯,不需要特别复杂的调度算法。只需要开两个线程,一个输入线程,一个电梯线程,我有写了一个Request类保存需求,作为输入线程和电梯线程的媒介,即所谓的调度器。

(2)第二次作业:第二次作业在采用了ALS调度策略,如此,调度器便显得格外重要,调度器需要实现判断存储所有请求、存储电梯可捎带的请求、在电梯内的请求。对于第二次作业,我主要有以下几个类:

  主函数类:主函数。

  调度器类:内含三个ArrayLIst分别存储所有请求、电梯内的请求、可被捎带的请求。一个请求经历的路径为所有请求——可被捎带的请求——电梯内的请求——完成。

  输入类:线程类,输入请求,并将请求存储到调度器类内的可被捎带请求ArrayList。同时确定程序终止的条件。

  电梯类:线程类,实现电梯的基本功能:静止、上行、下行、开门、关门、进人、出人。电梯每个循环依次完成下人、刷新可被捎带请求序列、上人、电梯运行。电梯运行前需要判断电梯是否需要停止运行,停止的条件为电梯内没人、没有可被捎带的人、所有请求中没有使电梯先上再下或先下再上的。

(3)第三次作业,在第二次作业的基础上增设了三部电梯,而且每部电梯都增加了限乘和停靠楼层,显然,第三次作业最主要的难点就是实现换乘。为了实现换乘,首先在每个请求之中增加一个via表示下一次需要换乘的电梯,needchange表示需要换乘,若不需要换乘,则设置needchange为false。每次请求输入后,首先判断是否可通过某一部电梯直达,若可以则设置needchange为false,若不可以,则设置needchange为true,然后判断包含可停靠在其起点和终点的电梯,若两电梯有共同的停靠楼层,则via设置为其重点电梯,否则设置为第三部电梯,运行时,当运行到可停靠楼层且可换乘到via电梯时,出电梯,并将需求的起点楼层设置为当前所在电梯,设置needchange为false,再同上判断是否需要换乘。然而本次作业由于开始写的时间太晚,导致没有完成,需要吸取经验。

2.程序bug分析

本单元在互测过程中并没有发现别人的bug,也没有被发现bug,所以就主要讲讲我写程序过程中遇到的bug。

(1)程序无法终止:主要是由于只结束了输入线程,而电梯线程没有结束。设置一个中间变量,当输入线程结束时表示电梯线程获得了可结束的必要条件,若电梯从调度器中无法获得需求,即调度器中没有需求,而且电梯内,没有需求时,电梯线程即可结束。

3.总结与反思

总结本单元的作业,给我最大的教训就是一定要提前写作业,不能拖。

本单元除了第三次作业,我认为我的其他两次作业写得还是挺好的,比第一单元有了很大的进步,写程序时面向对象的思想更加明显,对程序的架构设计更加清晰。

总之,努力,不可再出现无效作业了!!!

转载于:https://www.cnblogs.com/jerryleeo/p/10752834.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值