Java模拟客户银行取款案例

首先我们来看一下这个题的题目:

  • 某银行有4个柜台,假设某天有若干位客户来办理业务,每个客户到达银行的时间和取款需要的 时间分别用两个数组arrvie_time(已经按到达时间排序)和process_time来描述。假设每个客户在取款之前先拿号排队,然后在任意一个 柜台有空闲的时候,号码数最小的客户上去办理,假设所有的客户拿到号码之后都不会失去耐心走掉 , 请写程序计算所有客户的平均等待时间。

  • 要求实现:输入 arriveTime[1,2,3,4,4,8] , processTime[50, 20, 11, 25, 30, 40] , 输出:4.0 . 像这样


    Java模拟客户银行取款案例_第1张图片
    1.PNG

解决思路:

那么这道题的解决思路是怎样的呢,前四个不用等待有空闲柜台,第五个客户需要等待,必须等到第一个先办理完取款的人离开才能办理,那么他的等待时间就是第一个办理完人的到达时间+办理时间-自身的到达时间。后面的依次类推。如果前面的人有等待的时间,还要把这个时间算进去。 每循环一次,都需要将办理柜台取款的人的办理后的时间进行重新排序计算出最先办理完取款的人。 排序这里用的是java的Comparator接口 那么就需要两个数组,一个存所有客户按到达时间排序的数组,一个存办理取款的人的数组。每当办理取款的数组排序完毕后就相当于有人已经取完款了,这时最新办完取款的客户移除,将下一个客户添加到柜台取款的数组中,随后进行排序。 最后将所有客户的等待时间进行算数平均值计算。

解决:
  • 1:定义一个Person类,属性存入到达时间,办理业务时间,等待时间.


    Java模拟客户银行取款案例_第2张图片
    2.PNG
  • 2:在测试类main方法中,首先做一些基础操作


    Java模拟客户银行取款案例_第3张图片
    3.PNG
  • 3:创建一个存入客户的数组,数组长度等于arriveTime数组或process数组的长度


    Java模拟客户银行取款案例_第4张图片
    4.PNG
  • 4:初始化操作并将客户数组按到达时间进行排序,截取排好序的数组的前四个数据存入新数组,代表正在柜台办理业务的客户:


    Java模拟客户银行取款案例_第5张图片
    5.PNG
  • 这个init()是自定义的方法,下文的sort()也是:


    Java模拟客户银行取款案例_第6张图片
    6.PNG
Java模拟客户银行取款案例_第7张图片
7.PNG
  • 5:因为前四个人没有等待时间,所以从第五个人开始循环


    Java模拟客户银行取款案例_第8张图片
    8.PNG
  • 6:计算所有人的等待时间之和,并求出平均数:


    Java模拟客户银行取款案例_第9张图片
    9.PNG

你可能感兴趣的:(Java模拟客户银行取款案例)