zoukankan      html  css  js  c++  java
  • 第二次博客总结

    类图:

    本程序主要有出租车线程(taxi)以及调度线程(sche),请求类(Request)和寻找 最短路径类(即 bfs 类)。

    出租车线程掌管着出租车自己的状态以及运行,x,y 代表出租车的坐标,tag 为 出租车派单标识,Num 为出租车编号,state 为出租车状态,credibility 为出 租车信用度,Request 为当前接受的乘客请求,shortcut[]存储最短路径信息数

    组。出租车线程具有增加信用度方法和接受请求方法。

    调度线程掌管着乘客请求队列以及出租车队列,每隔 20ms 扫描一遍乘客请求队 列,根据一定规则分配乘客请求到特定的出租车。有增加乘客请求方法和增加出 租车方法。

    请求类掌管着乘客请求的信息,例如起始坐标,目的地坐标,窗口时间值,备选 出租车队列,和保存着请求输出信息的字符串数组。具有增加窗口时间函数,增 加备选出租车方法,以及一些获取输出信息的方法,和输出信息方法。

    寻找最短路径类为 GUI 中寻找最短路径方法的改进,减少了一些不必要的运算步 骤来缩减了运行时间。

    度量图:

    度量分析可知,taxi作为判断出租车的接客,送客,并自行判断状态进行state的改变,导致类的复杂度较高。Sche作为派车调度也较为复杂。故两者也出现了嵌套深度过多的问题。

    存在的bug:

    1. 无车响应时未输出
    2. 数组越界:

    因无脑采用选择表达式而忘记了判断数据的存在性:

    Flg = ( (guigv.m.map[x][y]==1||guigv.m.map[x][y]==3)

                           && (dis-1==shortcut[x*80+y+1] ) ) ? 4 :

                               ( (guigv.m.map[x][y]==2||guigv.m.map[x][y]==3)

                                   &&(dis-1==shortcut[(x+1)*80+y]) ) ? 3 :

                                       ( (guigv.m.map[x-1][y]==2||guigv.m.map[x-1][y]==3)

                                           &&(dis-1==shortcut[(x-1)*80+y]) ) ? 2 :

                                               ( (guigv.m.map[x][y-1]==1||guigv.m.map[x][y-1]==3)

                                                   &&(dis-1==shortcut[x*80+y-1]) ) ? 1:

                                                   0;

    Map数组本身可能越界导致crash。

    心得体会:

    没啥体会,早进补给站早轻松吧。。。

    要深入理解多线程之间的协作关系才能写好多线程。

  • 相关阅读:
    'static' can indeed be used in C++ to create a Static Member Function
    关闭QQ2008迷你首页
    开机无法使用欢迎屏幕
    关于U盘”无法复制:磁盘被写保护…”的解决办法
    SQL企业管理器下servers组下无项目解决方法
    COM+应用程序错误8004E00F COM+ 无法与Microsoft 分布
    安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法
    牛人教你这样用Google
    在K3凭证处理中的部份实用操作
    KIS7.5SP2迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司的技术支持机构联系”
  • 原文地址:https://www.cnblogs.com/sxz1606/p/8981293.html
Copyright © 2011-2022 走看看