电梯调度算法.docx

上传人:b****2 文档编号:2197037 上传时间:2022-10-27 格式:DOCX 页数:15 大小:76.88KB
下载 相关 举报
电梯调度算法.docx_第1页
第1页 / 共15页
电梯调度算法.docx_第2页
第2页 / 共15页
电梯调度算法.docx_第3页
第3页 / 共15页
电梯调度算法.docx_第4页
第4页 / 共15页
电梯调度算法.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

电梯调度算法.docx

《电梯调度算法.docx》由会员分享,可在线阅读,更多相关《电梯调度算法.docx(15页珍藏版)》请在冰豆网上搜索。

电梯调度算法.docx

电梯调度算法

 

一、算法设计

1.算法思想

本算法设计一部电梯,通过往返寻找方法,即先查询电梯运行方向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。

如果没有电梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼停住。

同时,电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。

随后再搭载去反方向的乘客,以此实现电梯的升降操作。

2.运行环境

本程序用java语言、eclipse平台编写。

3.问题描述

电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。

具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;反之。

二、实验步骤及方法

1.由于鼠标单击每个楼层按钮时,需要作出相应的动作,所以我们使用jbutton按钮类,通过jbutton的单击事件来模拟楼层按钮并通过改变颜色来表示按钮是否被按下

2.使用数组存储每个按钮的状态,1表示被按下,0表示未被按下。

用于电梯是否到达目标层的判断,及按钮颜色的刷新判断;

3.“电梯”也是一个jbutton类,通过改变颜色来模拟电梯的运行,需要在此类中设置一个方向值,用0,1,2分别表示电梯的停止向上向下运行。

三、源程序代码

importjava.awt.Color;

importjava.awt.Container;

importjava.awt.Font;

importjava.awt.GridLayout;

importjava.awt.TextField;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.ItemEvent;

importjava.awt.event.ItemListener;

importjava.util.*;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

importjavax.swing.Timer;

publicclassLifta{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

Brickbrick=newBrick();

}}

classBrick{//方块类

publicintoctime=0;//计算开关门事件。

publicintj=0;

publicStringclosedoor="关门";

publicStringclose="关";

publicStringopen="开";

JFrameframe=newJFrame("电梯调度算法");

JPanelpan=newJPanel();

JButtonbut=null;

JButtonsign=newJButton(+j+"楼");

JButtonopenclose=newJButton(closedoor+"");

JButtonopenkey=newJButton(open+"");

JButtonclosekey=newJButton(close+"");

publicArrayListblackBrick;;//brick用来依次存放button,程序用button显示蓝色表示有电梯的当前位置。

publicArrayListcontrolBrick;//controlBrick用来依次存放button,表示每层楼电梯口的是上键和下键,程序用button显示绿色表示对应键被按下。

publicint[][]controlTable;//用二维数组controlTable与电梯口的上下键对应,其中如果值1表示button应显示绿色,值0表示button应显示灰色。

publicArrayListnumberBrick;//numberBrick用来依次存放button,程序用button显示桔黄色表示电梯内的数字键被按下。

publicint[]table;//用二维数组table与电梯内的数字键对应,其中如果值1表示button应显示桔黄色,值0表示button应显示灰色。

publicint[]upSignalTable;//纪录向上任务的任务数组,值为1表示相应位的上键被按下。

publicint[]downSignalTable;//纪录向下任务的任务数组,值为1表示相应位的下键被按下。

publicTimertimer;//计时器。

publicLiftThreadlift;//控制每个电梯的线程数组。

//==============构造方法(下)初始化========//

publicBrick(){

sign.setBounds(0,0,80,40);//起始位置

//开关门部分

openclose.setBounds(80,0,80,40);

openclose.setBackground(Color.yellow);

openkey.setBounds(160,0,80,40);

openkey.addActionListener(newOpencolseListener());//开门按钮添加事件

closekey.setBounds(240,0,80,40);

closekey.addActionListener(newOpencolseListener());//关门按钮添加事件

pan.setLayout(null);//画布绝对定位

Fontfnt=newFont("Serief",Font.ITALIC,15);//设置字体样式

//实例化数组

numberBrick=newArrayList(10);

blackBrick=newArrayList(10);

controlBrick=newArrayList(10);

controlTable=newint[10][2];

for(inti=0;i<10;i++)

for(intj=0;j<2;j++)

controlTable[i][j]=0;

table=newint[10];

for(inti=0;i<10;i++)

table[i]=0;

upSignalTable=newint[10];

downSignalTable=newint[10];

for(inti=0;i<10;i++){

upSignalTable[i]=0;

downSignalTable[i]=0;

}

//********************画图************************

for(inti=10;i>0;i--){

//最左边黑色列

but=newJButton();

but.setFont(fnt);

but.setBounds(0,(11-i)*40,80,40);

but.setBackground(Color.BLACK);

blackBrick.add(but);

pan.add(but);

//显示楼层

but=newJButton(+i+"楼");

but.setFont(fnt);

but.setBounds(80,(11-i)*40,80,40);

but.addActionListener(newNumberListener(i));

but.setBackground(Color.gray);

numberBrick.add(but);

pan.add(but);

//向上键

but=newJButton("上");

but.setFont(fnt);

but.setBounds(160,(11-i)*40,80,40);

if(i!

=10)

but.addActionListener(newUpListener(i));

but.setBackground(Color.gray);

controlBrick.add(but);

pan.add(but);

//向下键

but=newJButton("下");

but.setFont(fnt);

but.setBounds(240,(11-i)*40,80,40);

if(i!

=1)

but.addActionListener(newDownListener(i));

but.setBackground(Color.gray);

controlBrick.add(but);

pan.add(but);

}

//*******************运行部分*****************

pan.add(sign);

pan.add(openclose);

pan.add(openkey);

pan.add(closekey);

frame.add(pan);

frame.setSize(329,479);

lift=newLiftThread();

frame.setVisible(true);

frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);

}

//====================================================构造方法(上)=======================================================//

//*************************************************填充方块和设置方法*******************************************************

publicvoidDrawBrick(){//重新刷新整个table,使每个button显示应该的颜色。

for(inti=1;i<=10;i++){

for(intj=0;j<10;j++)

((JButton)blackBrick.get(j)).setBackground(Color.black);

((JButton)blackBrick.get(10-lift.number)).setBackground(Color.blue);

}

}

publi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

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

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