活动要求:
- 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我们都可以调整代码得到我们想要的结果。单步跟踪图片