ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:76.88KB ,
资源ID:8122025      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8122025.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电梯调度算法.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

电梯调度算法.docx

1、电梯调度算法一、算法设计1算法思想本算法设计一部电梯,通过往返寻找方法,即先查询电梯运行方向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。如果没有电梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼停住。同时,电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。随后再搭载去反方向的乘客,以此实现电梯的升降操作。2运行环境本程序用java语言、eclipse平台编写。3问题描述电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还

2、没有到达目的地则继续向原方向运动。具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;反之。二、实验步骤及方法1由于鼠标单击每个楼层按钮时,需要作出相应的动作,所以我们使用jbutton按钮类,通过jbutton的单击事件来模拟楼层按钮并通过改变颜色来表示按钮是否被按下2使用数组存储每个按钮的状态,1表示被按下,0表示未被按下。用于电梯是否到达目标层的判断,及按钮颜色的刷新判断;3“电梯”也是一个jbutton类,通过改变颜色来模拟电梯的运行,需要在此类中设置一个方向值,用0,1,2分别表示电梯的停止向上向下运行。三、源程序代码i

3、mport java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.util.*;import javax.swing.JBu

4、tton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.Timer;public class Lifta /* * param args */ public static void main(String args) Brick brick=new Brick(); class Brick /方块类 public int octime=0; /计算开关门事件。 public int j=0; public String closedoor=关门; public String close=关; pub

5、lic String open=开; JFrame frame=new JFrame(电梯调度算法); JPanel pan=new JPanel(); JButton but=null; JButton sign=new JButton(+j+楼); JButton openclose=new JButton(closedoor+); JButton openkey=new JButton(open+); JButton closekey=new JButton(close+);public ArrayList blackBrick; /brick用来依次存放button,程序用button

6、显示蓝色表示有电梯的当前位置。public ArrayList controlBrick; /controlBrick用来依次存放button,表示每层楼电梯口的是上键和下键,程序用button显示绿色表示对应键被按下。public int controlTable; /用二维数组controlTable与电梯口的上下键对应,其中如果值1表示button应显示绿色,值0表示button应显示灰色。 public ArrayList numberBrick; /numberBrick用来依次存放button,程序用button显示桔黄色表示电梯内的数字键被按下。public inttable;

7、/用二维数组table与电梯内的数字键对应,其中如果值1表示button应显示桔黄色,值0表示button应显示灰色。 public int upSignalTable; /纪录向上任务的任务数组,值为1表示相应位的上键被按下。public int downSignalTable; /纪录向下任务的任务数组,值为1表示相应位的下键被按下。 public Timer timer; /计时器。 public LiftThread lift; /控制每个电梯的线程数组。 /=构造方法(下)初始化=/ public Brick() sign.setBounds(0, 0, 80, 40); /起始位置

8、 /开关门部分 openclose.setBounds(80, 0, 80, 40); openclose.setBackground(Color.yellow); openkey.setBounds(160, 0, 80, 40); openkey.addActionListener(new OpencolseListener();/开门按钮添加事件 closekey.setBounds(240, 0, 80, 40); closekey.addActionListener(new OpencolseListener();/关门按钮添加事件 pan.setLayout(null); /画布绝

9、对定位 Font fnt=new Font(Serief,Font.ITALIC,15); /设置字体样式 /实例化数组 numberBrick=new ArrayList(10); blackBrick=new ArrayList(10); controlBrick = new ArrayList(10); controlTable = new int102; for (int i = 0; i 10; i+) for (int j = 0; j 2; j+) controlTableij = 0; table = new int10; for (int i = 0; i 10; i+) t

10、ablei = 0; upSignalTable = new int10; downSignalTable = new int10; for (int i = 0; i 0;i-) /最左边黑色列 but=new JButton(); but.setFont(fnt); but.setBounds(0, (11-i)*40, 80, 40); but.setBackground(Color.BLACK); blackBrick.add(but); pan.add(but); /显示楼层 but=new JButton(+i+楼); but.setFont(fnt); but.setBounds

11、(80, (11-i)*40, 80, 40); but.addActionListener(new NumberListener(i); but.setBackground(Color.gray); numberBrick.add(but); pan.add(but); /向上键 but=new JButton(上); but.setFont(fnt); but.setBounds(160, (11-i)*40, 80, 40); if(i!=10) but.addActionListener(new UpListener(i); but.setBackground(Color.gray);

12、 controlBrick.add(but); pan.add(but); /向下键 but=new JButton(下); but.setFont(fnt); but.setBounds(240, (11-i)*40, 80, 40); if(i!=1) but.addActionListener(new DownListener(i); but.setBackground(Color.gray); controlBrick.add(but); pan.add(but); /*运行部分* pan.add(sign); pan.add(openclose); pan.add(openkey);

13、 pan.add(closekey); frame.add(pan); frame.setSize(329, 479); lift = new LiftThread(); frame.setVisible(true); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); /=构造方法(上)=/ /*填充方块和设置方法* public void DrawBrick() /重新刷新整个table,使每个button显示应该的颜色。 for (int i = 1; i =10; i+) for(int j=0;j10;j+) (JButton)

14、blackBrick.get(j).setBackground(Color.black); (JButton) blackBrick.get(10-lift.number).setBackground(Color.blue); public void DrawControlBrick() /将所电梯口的上下键全部重新按当前状态显示颜色。 for (int i = 0; i 10; i+) for(int j=0;j2;j+) if (controlTableij = 1) (JButton) controlBrick.get(i * 2 + j).setBackground(Color.gre

15、en); else (JButton) controlBrick.get(i * 2 + j ).setBackground(Color.gray); public void DrawNumberBrick() /将所有电梯内的数字键重新按当前状态显示颜色。 for (int i = 0; i 10; i+) if (tablei = 1) (JButton) numberBrick.get(i ).setBackground(Color.orange); else (JButton) numberBrick.get(i ).setBackground(Color.gray); public

16、boolean WorkState() /判断当前电梯内的数字键是否被按下,如有键被按下,则值为1,如果没有任何键被按下,则值为0。 for (int i = 0; i x) lift.state = 1; if (number 0; i-) if (table10 - i = 1|controlTable10-i1=1|controlTable10-i0=1) count+; if (count = 0& lift.number = lift.destination) count=0; for(int j=lift.number;j0) lift.state=1; /System.out.p

17、rintln(改变方向:向上); else lift.state = 0; public void actionUp()/检查向上运行的电梯是否还需向上,即检查在此层上还有没有数字键被按下,如果没有,则置电梯状态为停止,并使该电梯内所有数字键还原。 if (lift.state = 1) int count = 0; for (int i = lift.number; i =lift.destination) count=0; for(int j=lift.number;j0;j-) if(table10-j=1|controlTable10-j1=1|controlTable10-j0=1)

18、 count+; if(count0) lift.state=2; /System.out.println(改变方向:向下); else lift.state = 0; public void actionPerformed(ActionEvent event) int state = lift.state; /纪录电梯当前状态。 if (lift.state!=0&table10 - lift.number = 1) /如果电梯经过电梯内数字键显示的要到达的楼层,则该数字键状态恢复未按,并重新显示数字键颜色。 table10 - lift.number = 0; DrawNumberBric

19、k(); new openclosThread(); if (state != 0& lift.number = lift.destination) /如果电梯属于逆向到达,则此任务完成,从任务数组中删除并重新显示上下键的颜色。 if (state = 2& controlTable10 - lift.numberstate - 1= 0) controlTable10 - lift.number2 - state = 0; DrawControlBrick(); new openclosThread(); if (state = 1& controlTable10 - lift.number

20、state - 1= 0) controlTable10 - lift.number2 - state = 0; new openclosThread(); DrawControlBrick(); if (state = 1) /向上电梯经过的向上任务完成,从任务数组中删除并重新显示上下键的颜色。 if (controlTable10 - lift.number0 = 1) controlTable10 - lift.number0 = 0; new openclosThread(); DrawControlBrick(); if (state = 2) /向下电梯经过的向下任务完成,从任务数组中删除并重新显示上下键的颜色。 if (controlTable10 - lift.number1 = 1) controlTable10 - lift.number1 = 0; new openclosThread(); DrawControlBrick(); actionUp(); /判断是否继续向上 actionDown(); /判断是否继续向下 state = lift.state; /如果电梯状态不为停止,则按照运行方向运行。 if (state = 1) lift.number+; /System.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1