Unit2

写在最前

​ 最终还是没有de完第三次作业的bug,始终无法沉下心来debug,或者说沉下心来学习,很久以来一直都是这样。不太想把这篇博客变成述说心事的水文,所以还是认认真真的做好之前部分的总结吧,待自己找到目标,心有所向,愿意奋斗之时,定将最后一次作业认真补上。

调度策略

  • 第一次作业:自己选择了使用一个控制器(controller)来队请求队列进行调度;请求(requester)专门一类来处理输入,并将请求放入请求队列;电梯则在有目标时就运行,顺路能接上的都接上,同时在无目标并且电梯内没人时停止运行,等待调度器调度。
  • 第二次作业:整体遵循第一次策略,主要改变有电梯自己会扫描附近楼层的请求,如果有则自动去接;调度器会选择最近的停止运行状态的电梯去接乘客。
  • 第三次作业:经历了几个版本,最终选择了让所有电梯无脑循环遍历,然后顺方向就接上,设立一个hashset记录当前楼层下电梯的人,防止反复上电梯;定期清空hashset防止只能将该游客由该电梯送到其他楼层转接的情况(如若C把到2楼的人送到了3楼,则只能由C再将其送回1楼或15楼等,其他电梯才能把它送到2楼)。下电梯则选择提前下。

程序中的bug

  • 第一次作业:最初设计时电梯自身运行以及设计的缺陷,导致电梯有时会在最高层却不转向,有时会到了目标楼层就转向,导致无法接送继续向该方向运行的乘客。最终都解决了
  • 第二次作业:以为assert person = null; 就能解决person == null时的情况,自己测试时也不认真,导致接到null乘客的情况而被hack, 最终改成接到空乘客就结束。
  • 第三次作业:由于无法保证记录请求队列的量的线程安全而导致电梯无法停止。自己前两次作业都可以,始终无法解决此bug,也无心解决此bug。

程序结构分析

  • 第一次作业:

Unit2_第1张图片

Unit2_第2张图片
Unit2_第3张图片

  • 第二次作业:

Unit2_第4张图片

Unit2_第5张图片
Unit2_第6张图片
Unit2_第7张图片

  • 第三次作业:

Unit2_第8张图片

Unit2_第9张图片
Unit2_第10张图片

整体来说设计不足,复杂度也较高。

心得与反思

​ 一定要沉下心来做一些事情,以及,早点开始做!!!

你可能感兴趣的:(Unit2)