• 结对编程之电梯调度算法


                                                                     电梯调度结对编程                            

    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

              

  • 相关阅读:
    petshop4.0 详解之三(PetShop数据访问层之消息处理)
    MemberShip的使用
    PetShop 详解之一 系统架构设计
    PetShop4,错误提示:没有为 SQL 缓存通知启用数据库"MyCard"
    PetShop4,错误提示:System.Web.Security.SqlMembershipProvider”要求一个与架构版本“1”兼容的数据
    【Linux从零开始】:1.文件与目录的管理和配置(1)
    【笔记】在.NET中使用强类型有以下优点:
    【好文收藏】:Linq to DataSet
    【好文收藏】泛型与非泛型的比较(百度文库)
    HDOJ1102 Constructing Roads[Prim()]
  • 原文地址:https://www.cnblogs.com/mtj3344/p/4819628.html
Copyright © 2020-2023  润新知