结对编程之电梯调度算法

                                                                 电梯调度结对编程                            

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ChatGPT结对编程是一种将两个程序员合作编写代码的技术。这种技术可以提高编写代码的效率和质量,同时也可以提高两位程序员的技能水平。以下是ChatGPT结对编程的步骤: 1. 首先,找到一个合适的编程伙伴。最好是一个有一定编程经验的人,但如果你是新手,也可以与另一个新手合作。 2. 确定你们编写的代码项目。你们可以选择一个共同感兴趣的项目或者一个有挑战性的项目。确保你们都对项目有一定的理解。 3. 确定你们的角色。一个人可以担任主要代码编写者,另一个人可以担任代码审核者。这样可以确保代码的质量。 4. 确定编程环境。你们可以使用一个共同的编程环境,如Visual Studio Code或者Atom。也可以使用在线编程环境,如CodePen或JSFiddle。 5. 开始编写代码。一个人负责编写代码,另一个人负责审核代码。在编写代码的过程中,你们可以随时通过聊天工具进行交流和讨论。 6. 定期进行代码审核。定期进行代码审核可以确保代码的质量。你们可以定期的分享代码,并相互审核对方的代码。 7. 完成项目并进行总结。完成项目后,你们可以总结你们的经验和教训,并提出改进建议。这将有助于你们以后更好的编写代码。 总之,ChatGPT结对编程是一种非常有用的技术,可以提高编写代码的效率和质量。通过合作编写代码,你们可以相互学习,相互支持,以及增强你们的编程技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值