电梯算法java_电梯调度算法总结

一 :任务要求

ccef6760e6ed737330339f702baaa258.png

本次的程序任务和要求如上图所示,需要有4部电梯同时运行,每部电梯都有自己的限制且被同一控制器所控制,希望有图形显示效果,本次的任务我们组已经完成,关于编程的历程与总结现在就一一道来。

二:初步构想阶段

我们先尝试解决最核心的问题,即电梯的调度算法问题,初步构思是这样的,电梯根据当前控制器内所要到的楼层信息判断是向下运行或向上运行,并向上或向下运行至控制器内楼层的最大或最小值,期间出现的所有楼层信息都加入到控制器内,若有比最值更大或更小的信息不予理会,只是加入控制器中,每到一楼层就判断控制器内是否有该楼层,有则在该层停留,并移除控制器内该层信息,无则继续运行,运行至最值处,重新从控制器内找出最值,并判断向上或向下运行,如此循环。当控制器内没有信息后,电梯等待一段时间后会回到初值处。

代码如下:

1 public void down()//定义一个下降函数 便于复用

2 {3 for(;cout>=con.getmin();cout--)4 {5 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black);6 if(con.getlist(this.mode).contains(cout))7 {8 con.remove(cout);9 System.out.println("到达"+cout+"层");10 changepeople();11 try{12 Thread.sleep(500);13 } catch(InterruptedException e) {14 //TODO Auto-generated catch block

15 e.printStackTrace();16 }17 if(cout==con.getmin())18 break;19 }20 if(cout==con.getmin())21 break;22 try{23 Thread.sleep(200);24 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.white);25 } catch(InterruptedException e) {26 //TODO Auto-generated catch block

27 e.printStackTrace();28 }29 }30 }31 public void run() //电梯运行算法 主要运行函数

32 {33 while(true)34 {35 while(!con.getlist(this.mode).isEmpty())36 {37 con.setmami();38 if(con.getmax()>cout) //和下面的if组成判断电梯是否向上运行 否则向下运行

39 {40 if(con.getmin()>cout||(con.getmax()-cout)<=(cout-con.getmin()))41 {42 for(;cout<=con.getmax();cout++)43 {44 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black);45 if(con.getlist(this.mode).contains(cout))46 {47 con.remove(cout);48 System.out.println("到达"+cout+"层");49 changepeople();50 try{51 Thread.sleep(500);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电梯调度算法可以采用以下几种: 1. FCFS(First-Come, First-Serve)先来先服务算法电梯按照请求的顺序进行服务,即按照电梯内部按钮或者外部楼层按钮的按下顺序来进行电梯的运行。 2. SSTF(Shortest-Seek-Time-First)最短寻找时间优先算法电梯在当前楼层停靠后,选择距离当前楼层最近的楼层进行服务,即选择距离最短的楼层。 3. SCAN算法电梯在一个方向上,按照楼层从低到高或者从高到低的顺序进行服务,直到到达最顶层或者最底层后,改变方向继续服务。 4. C-SCAN算法:与SCAN算法类似,但是在到达最高层或者最底层后,电梯直接返回到另一端,重新按照方向进行服务。这种算法可以避免电梯在两端徘徊,提高运行效率。 以下是一个简单的电梯调度算法Java实现(使用FCFS算法): ```java public class Elevator { private int currentFloor; private int[] requests; public Elevator() { currentFloor = 1; requests = new int[10]; } public void addRequest(int floor) { for (int i = 0; i < requests.length; i++) { if (requests[i] == 0) { requests[i] = floor; break; } } } public void run() { for (int i = 0; i < requests.length; i++) { if (requests[i] == 0) { continue; } int floor = requests[i]; if (floor > currentFloor) { System.out.println("Elevator going up to floor " + floor); currentFloor = floor; } else if (floor < currentFloor) { System.out.println("Elevator going down to floor " + floor); currentFloor = floor; } System.out.println("Elevator stopping at floor " + currentFloor); requests[i] = 0; } } } ``` 以上是一个简单的电梯调度算法Java实现,使用FCFS算法。可以根据需要进行修改和扩展,以适应不同的场景需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值