赞
踩
文末有源码
某一层楼20层,有五部互联的电梯。基于线程思想,编写一个电梯调度程序。
在文件夹内双击运行elevator.jar
,进入电梯模拟系统如下图
一开始电梯都停在1层,数码显示器显示01
点击每部电梯的功能键(开/关键, 报警器, 楼层按钮), 进行单部电梯内命令处理模拟
点击左侧楼层上下按钮,进行多部电梯外命令处理模拟。
注:由于空间有限无法给每一个电梯每一层都做上下按钮,故只在每层设置一组上下按钮,表示该层有上行或下行请求。其中20层不能继续上行、1层不能继续下行,故不设对应按钮。
外部事件及对应响应:
用户按下某一楼层的上/下行按钮(每层设置一个上/下行按钮)
a. 筛选处于正常状态的电梯,计算每部电梯到达此层的路程:
静止态的电梯:
当前楼层和请求楼层之间的距离即为路程(每层层高为30个像素点)
上行电梯:
若请求楼层在电梯当前所在楼层之上,电梯当前楼层和请求楼层之间的距离即为路程
若请求楼层在电梯当前坐在楼层之下
路程=电梯上行到达任务中最远楼层的距离*2+当前楼层和请求楼层之间的距离
下行电梯:
若请求楼层在电梯当前所在楼层之下,电梯当前楼层和请求楼层之间的距离即为路程
若请求楼层在电梯当前坐在楼层之上
路程=电梯下行到达任务中最远楼层的距离*2+当前楼层和请求楼层之间的距离
b. 选出所需路程最短的电梯,将此请求加入该电梯的任务序列中等待响应
Java. Swing. JFrame
Elevator
继承面板父类Java. Swing. JPanel
实现线程接口Java. lang. Runnable
component. Buttons
Java. Swing. JLabel
component. MyButton
Java. Swing. JLabel
Java. Swing. JLabel
Java. Swing. JLabel
component. Floor
Java. Swing. JLabel
Java. Swing. JLabel
component. MyButton
UI. MyBuilding
IsRun
= false # 静止状态IsRun
= true # 运行状态IsUp
= true # 上行IsDown
= true # 下行IsOpen
= true # 开门状态IsOpen
= false # 关门状态whichFloorIsWaitUp[i]
= true # 第i
层请求上行whichFloorIsWaitDown[i]
= true # 第i
层请求下行public class EventListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("I'm listening!");
}
}
报警器
buttons.btnAlarm.btn.addActionListener(new EventListener() {
public void actionPerformed(ActionEvent e) {
alarm = true;
buttons.setFloor(-1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。