活动要求:

  • 1 补充课上没有完成的作业
  • 2 参考15.3节,用自己完成的队列(链队,循环数组队列)实现模拟票务柜台排队功能
  • 3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息
  • 4 把代码推送到代码托管平台
  • 5 把完成过程写一篇博客:重点是单步跟踪过程和遇到的问题及解决过程
  • 6 提交博客链接

活动过程:

  • 首先我们先把书上的代码敲了(15.3、15.4)
  • 然后我们开始对15.4进行分析。首先要提的一点是,课本上的注释非常非常非常重要(重要的事情说三遍)
  • 首先我们来翻译一下课本上的注释:
  • // process the simulation for various number of cashiers :过程模拟为各种数量的收银员
  • // load customer queue :加载客户队列
  • // process all customers in the queue :处理所有客户在队列中
  • // output results for this simulation :这个模拟的输出结果
  • 现在我们来观察一下这个代码。
  • 第一个for循环的作用:将所有cashiers(10个)加载进队列中
  • 第二个for循环的作用:将cashiers的时间归零
  • 第三个for循环的作用:加载客户
  • while循环:计算客户办理业务的平均时间。
  • 注意:这个代码计算的是柜台办理“一次”业务的平均时间而不是一个柜员办理业务所需的平均时间。

遇到的问题:

  • 应该不算是遇到的,是我的结对伙伴刘伟康康哥给我提出来的,他问:for (int cashiers=0; cashiers < MAX_CASHIERS; cashiers++) 这个for循环中设置的cashiers为0时为什么时间不是正无穷(cashiers=0相当于柜台没人,那么顾客等待的时间不是正无穷吗?)
  • for (int count=0; count <= cashiers; count++) 这里的cashiers和count没有关系,但由于我们在输出的时候给cashiers+1System.out.println ("Number of cashiers: " + (cashiers+1)); 所以 count=0的时候输出的是cashier=1的结果。所以cashiers=0或者是cashiers=1和count没有关系。但是count必须等于0因为count跟数组下标有关系,cashier=0或者是1我们都可以调整代码得到我们想要的结果。

单步跟踪图片

posted on 2017-10-22 22:53  20162319莫礼钟  阅读(156)  评论(0编辑  收藏  举报