這里用實現(xiàn)Quene接口的LinkedList作為隊列容器,實現(xiàn)一個簡單的測試顧客訪問賣票柜臺的窗口數(shù)量設(shè)置問題。
要求假定如下:
- 顧客只排成一隊,先到的人先去窗口得到服務(wù)匹层。
- 平均每15秒會來一位顧客。
- 如果有空閑的售票口顧客抵達之后就會立刻開始處理锌蓄。
- 從顧客來到售票口到處理完顧客請求升筏,這個過程平均為2分鐘。
模擬100個顧客參與測試瘸爽。計算每個顧客需要等待的平均時間
public class TickerCount {
final static int PROCESS = 120; //客人買票需要消耗的時間
final static int MAX_CASHIERS=10; //測試的最大售票窗口數(shù)
final static int NUM_CUSTOMERS=100; //測試客人的總數(shù)量
public static void main(String[] args) {
Customer customer;
Queue<Customer> customerQueue=new LinkedList<Customer>(); //這里使用Queue的實現(xiàn)類LinkedList
int[] cashierTime=new int[MAX_CASHIERS]; //定義一個數(shù)組保存每個窗口消耗的時間總數(shù)
int totalTime,averageTime,departs,start;
//外層大循環(huán)表示本次參與測試的窗口數(shù)量您访,依次測試從1到10;因為是從0開始的蝶糯,所以是從0至9洋只;
for(int cashiers=0;cashiers<MAX_CASHIERS;cashiers++){
//沒次循環(huán)都要給每個參與測試的窗口時間累計清零
for(int count=0;count<cashiers;count++)
cashierTime[count]=0;
//乘客入隊列辆沦,到達時間每個15秒入隊一個昼捍,乘客對象保存著他的到達時間
for(int count=1;count<=NUM_CUSTOMERS;count++)
customerQueue.add(new Customer(count*15));
totalTime=0;
//開始模擬
while(!(customerQueue.isEmpty())){//如果顧客隊列不為空
//這里挨個窗口給他放進去顧客算時間。
for(int count=0;count<=cashiers;count++){
if(!(customerQueue.isEmpty())){
//每次給窗口放顧客都會減少隊列里的顧客肢扯,所以這里也要判斷妒茬。為空則結(jié)束去打印
customer=customerQueue.remove();//取出顧客
if(customer.getArrivalTime()>cashierTime[count])
//判斷顧客的到達時間和隊列處理之前顧客所需消耗時間的大小,
start=customer.getArrivalTime();//如果大于說明窗口是空的則可以直接處理
else
start=cashierTime[count];//如果小于蔚晨,說明還有沒處理的乍钻,把處理好的時間設(shè)為開始時間
departs=start+PROCESS;//離開時間等于開始時間加上處理過程時間
customer.setDepartureTime(departs); //設(shè)置顧客的離開時間
cashierTime[count]=departs;//重設(shè)當(dāng)前窗口的時間
totalTime+=customer.totalTime();//把每個顧客的總時間加起來
}
}
}
averageTime=totalTime/NUM_CUSTOMERS;
System.out.println("Number of cashiers:"+(cashiers+1));
System.out.println("Average time"+averageTime+"\n");
}
}
}
其輸出結(jié)果如下
Number of cashiers:1
Average time5317
Number of cashiers:2
Average time2325
Number of cashiers:3
Average time1332
Number of cashiers:4
Average time840
Number of cashiers:5
Average time547
Number of cashiers:6
Average time355
Number of cashiers:7
Average time219
Number of cashiers:8
Average time120
Number of cashiers:9
Average time120
Number of cashiers:10
Average time120
據(jù)結(jié)果可以按要求設(shè)置合適數(shù)量的窗口。