构建3个电梯的电梯组,楼层在10层以上,模拟其运行要求电梯组并联运行,即按下按钮后,自动 根据楼层和移动方向调度最优的电梯(假设每台电梯上下一 层都是1s.开关门时间为1s)。 示例:3人小组,3台电梯ABC,楼层为12楼。 测试状态;A在8楼下行,目标楼层1;B在6楼,静止;C在 1楼上行,目标楼层3。 测试1:小红在2楼,下行 输出:电梯B下行(B.C同时到,考虑移动方向,选择B) 测试2:小明在6楼,上行(在上一个测试执行之后1s) (A在7楼下行,目标楼层1;B在5楼下行,目标楼层2;C 在2楼上行,目标楼层3。) 输出:电梯C上行,目标楼层3.6 说明:此为基础要求,可自由发挥扩展。根据功能丰富程度 给分(比如目标楼层有多个,电梯满载)。验收时无标准测 试,自行展示程序功能。用java写一段程序

时间: 2023-10-10 20:06:27 浏览: 53
以下是一个简单的Java程序,实现了基本的电梯调度功能: ```java import java.util.*; public class Elevator { private int id; private int floor; private int direction; // 0 for static, 1 for up, -1 for down private boolean[] buttonUp; private boolean[] buttonDown; private ArrayList<Integer> queue; private boolean doorOpen; private boolean full; public Elevator(int id) { this.id = id; this.floor = 1; this.direction = 0; this.buttonUp = new boolean[11]; this.buttonDown = new boolean[11]; this.queue = new ArrayList<Integer>(); this.doorOpen = true; this.full = false; } public void pressButton(int toFloor) { if (toFloor > this.floor) { this.buttonUp[toFloor] = true; } else if (toFloor < this.floor) { this.buttonDown[toFloor] = true; } if (!this.queue.contains(toFloor)) { this.queue.add(toFloor); } } public void move() { if (this.direction == 0 && !this.queue.isEmpty()) { int firstFloor = this.queue.get(0); if (firstFloor > this.floor) { this.direction = 1; } else if (firstFloor < this.floor) { this.direction = -1; } } if (this.direction != 0) { if (this.direction == 1) { this.floor++; } else { this.floor--; } if (this.queue.contains(this.floor)) { this.queue.remove(new Integer(this.floor)); this.doorOpen = true; this.full = false; } if (this.floor == 10 || this.floor == 1) { this.direction = 0; } else if (this.direction == 1 && this.buttonUp[this.floor]) { this.doorOpen = true; this.full = false; this.buttonUp[this.floor] = false; } else if (this.direction == -1 && this.buttonDown[this.floor]) { this.doorOpen = true; this.full = false; this.buttonDown[this.floor] = false; } else if (this.queue.isEmpty() || this.full) { this.direction = 0; } } } public boolean isDoorOpen() { return this.doorOpen; } public void openDoor() { this.doorOpen = true; } public void closeDoor() { this.doorOpen = false; } public boolean isFull() { return this.full; } public void setFull(boolean full) { this.full = full; } public int getFloor() { return this.floor; } public int getDirection() { return this.direction; } public ArrayList<Integer> getQueue() { return this.queue; } public static void main(String[] args) { Elevator[] elevators = new Elevator[3]; for (int i = 0; i < 3; i++) { elevators[i] = new Elevator(i + 1); } Scanner input = new Scanner(System.in); while (true) { System.out.print("Enter your floor number (-1 to exit): "); int fromFloor = input.nextInt(); if (fromFloor == -1) { break; } System.out.print("Enter your destination floor number: "); int toFloor = input.nextInt(); int bestElevator = -1; int minDistance = 20; for (int i = 0; i < 3; i++) { if (elevators[i].getDirection() == 0) { int distance = Math.abs(elevators[i].getFloor() - fromFloor); if (distance < minDistance) { bestElevator = i; minDistance = distance; } } else if (elevators[i].getDirection() == 1 && toFloor > elevators[i].getFloor() || elevators[i].getDirection() == -1 && toFloor < elevators[i].getFloor()) { int distance = Math.abs(elevators[i].getFloor() - fromFloor) + Math.abs(elevators[i].getFloor() - toFloor); if (distance < minDistance) { bestElevator = i; minDistance = distance; } } } if (bestElevator != -1) { elevators[bestElevator].pressButton(fromFloor); elevators[bestElevator].setFull(elevators[bestElevator].getQueue().size() >= 10); System.out.println("Elevator " + (bestElevator + 1) + " is dispatched."); } else { System.out.println("All elevators are busy, please wait."); } for (int i = 0; i < 3; i++) { elevators[i].move(); if (elevators[i].getDirection() == 0 && !elevators[i].isDoorOpen() && elevators[i].getQueue().isEmpty()) { elevators[i].openDoor(); System.out.println("Elevator " + (i + 1) + " is idle."); } } } input.close(); } } ``` 这个程序实现了以下功能: - 模拟了三台电梯在10层以上的楼房内运行。 - 支持多个乘客同时按下电梯按钮,并根据当前运行状态选择最优的电梯。 - 支持电梯上下行和停靠在某一层,并在到达目标楼层后开关门。 - 支持电梯满载和等待状态。 注意:由于本程序是在控制台中运行,所以没有实现电梯内部按键和显示屏等功能。如果需要完整的电梯模拟器,请参考其他开源项目。

相关推荐

最新推荐

recommend-type

基于电力电子变压器并联运行动态的Matlab仿真设计

本文基于有功和无功调差特性方程建立了PET控制策略及模型,基于该模型对PET并联运行动态过程进行仿真研究。仿真结果表明,该控制策略可以在保持额定供电频率的前提下,实现有功、 无功负荷的稳定分配,且动态特性...
recommend-type

交错并联CCM Boost PFC变换器研究

在采用占空比补偿电流控制策略后,两支路电流均为3.6 A,两个MOS管的电流峰值均为6.8 A,均流效果明显,开关管的电流应力减小,验证了占空比补偿电流控制交错并联CCM Boost PFC变换器的可行性。
recommend-type

多VSG并联组网下的功率分配策略研究

基于孤岛微电网下的VSG虚拟阻抗的双闭环控制策略,在外环中引入励磁调节器,考虑实际导线参数,提出一种多VSG并联组网下的功率分配策略,通过搭建两台不同容量的VSG并联系统仿真模型,实现VSG在并网下按照额定容量比...
recommend-type

基于TL431的并联扩流稳压电路的设计方案

本文根据TL431三端可调精密内部结构及特点,阐述了并联稳压电路和串联稳压电路的基本构成和性能,提出了一种TL431的线性精密稳压电源的设计方案。
recommend-type

均流式并联双向DC-DC控制器的设计

结果表明,均流式并联双向DC-DC控制器在双闭环的控制下,不仅能够保证输出电流与输出电压的稳定,并且在自均流的控制方案下,能够将初始电感平均电流差值由0.34 A降到低于0.01 A以下,验证了上述理论方案的可实践性...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。