结对编程之电梯调度算法

                                                                 电梯调度结对编程                            

1.题目:设计一个电梯调度算法,实现基本的电梯调度功能,要求有四部电梯,每部电梯21层,并且具有重量检验算法。

2.设计前的准备:确定了结对之后,我们首先对设计中可能遇到的问题进行了大体的分析与讨论,确定了编程的方向(java语言)并且约定了一些编程规范,语法规范为使用eclipse中的format规范代码,其他可能遇到的编程问题会在开发中随时交流。接着我们对题目进行了更深入的分析,考虑到电梯运行时的各种情况并发表自己的看法,思考设计合适的算法来解决调度问题。最后我们上网查阅了大量关于电梯调度算法的资料,并下载了一些网上的代码,以作参考。

3.设计中:在设计中遇到了很多困难,不仅有两个人合作不够默契的问题,也存在基础的问题,编程基础不够扎实,最困难的是算法的编写,要考虑到种种情况,比如四部电梯的最优调度等。最后克服了种种困难,在查阅大量代码,学习别人的思想之后,终于将项目的一些基本功能完成。

4.心得:通过这次结对编程,让我充分的了解到在做项目时,两个人应该提前考虑到可能遇到的各种问题,尽可能的及早解决发现的问题,防止为以后的编程留下隐患,此外在合作中遇到可能影响项目的问题时应两个人商量,合作解决,避免自己的武断造成损失。以下是具体项目:

(1)项目共有六个类,分别为:

ElevatorTest 项目主类,程序的入口

ElevatorFrame 程序主窗口

ElevatorPanel   程序主窗口界面布局

MainPanel   电梯布局

ControlPanel  命令布局及监听

SubPanel  一部电梯的界面布局及管理

(2)项目的主要算法:

private boolean ProcessInput(int[] FloorStop, int num, int CurrentFloor,

int CurrentState) {

if (CurrentState == 1) {

if (num > CurrentFloor) {

FloorStop[num] = 1;

return true;

}

} else if (CurrentState == 2) {

if (num < CurrentFloor) {

FloorStop[num] = 1;

return true;

}

} else {

FloorStop[num] = 1;

return true;

}

return false;

}

private boolean isTheSameFloor(int[] FloorStop) {

if (FloorStop[CurrentFloor] == 1) {

return true;

}

return false;

}

private boolean isUP(int[] FloorStop) {

int i;

for (i = 1; i <= 20; ++i) {

if (FloorStop[i] == 1) {

break;

}

}

if (CurrentFloor < i) {

return true;

} else {

return false;

}

}

// 判断该部电梯,是否还要继续向上运行

private boolean isStillUP(int[] FloorStop, int Current) {

int i;

for (i = Current + 1; i <= 20; ++i) {

if (FloorStop[i] == 1) {

return true;

}

}

return false;

}

// 判断该部电梯,是否还要继续向下运行

private boolean isStillDOWN(int[] FloorStop, int Current) {

int i;

for (i = Current - 1; i > 0; --i) {

if (FloorStop[i] == 1) {

return true;

}

}

return false;

}

// 判断该部电梯,是否要在某个楼层停靠

private boolean isStoped(int[] FloorStop, int Current) {

if (FloorStop[Current] == 1) {

return true;

}

return false;

}

调度(其中之一):

private void isAssignedToStopElevatorDown(ArrayList runnableElevators) {

if (runnableElevators.size() == 0) {

return;

}

for (int i = 0; i < DownWardArray.length; ++i) {

if (DownWardArray[i] == 2) {

int nearestDistence = 999;

int nearestElevator = -1;

for (int j = 0; j < runnableElevators.size(); ++j) {

if (((SubPanel) runnableElevators.get(j)).getCurrentState()

== 0) {

int temp =

((SubPanel) runnableElevators.get(j))

.getCurrentFloor();

if (Math.abs(i - temp) < nearestDistence) {

nearestDistence = Math.abs(i - temp);

nearestElevator = j;

}

}

}

if (nearestElevator != -1) {

(

(SubPanel) runnableElevators.get(

nearestElevator)).setTask(

i);

DownWardArray[i] = 0;

nearestDistence = 999;

nearestElevator = -1;

}

}

}

}

(3)运行截图

下部的下拉框为电梯外部按钮,你在几楼就选择几楼的楼号,选择上楼或者下楼,距离你楼层数最少的电梯就会移动到你的楼层,进入电梯后就可选择自己要去的楼层(注意电梯上升时不能去下面的楼层,下降时不能去上面的楼层)

                                     

                                                              

Githubhttps://github.com/mtj075/Elevator.git

          

原文地址:https://www.cnblogs.com/mtj3344/p/4819628.html