查找对象在队列上花费的平均队列长度和平均时间

时间:2014-11-13 16:14:15

标签: java queue

我正在制定一项计划,以刺激机场的运营,飞机着陆和起飞。登陆飞机优先于起飞飞机,但它们是两个独立的队列 平面随机添加并从队列中删除。计算landingQueue和takeOffQueue的平均队列长度以及确定飞机在队列上花费时间的最佳方式是什么。

Random generator = new Random(System.currentTimeMillis());

ArrayQueue<Double> landingQueue = new ArrayQueue<>();
ArrayQueue<Double> takeOffQueue = new ArrayQueue<>();
ArrayQueue<Integer> averageLengthQueue = new ArrayQueue<>();
boolean runwayIsFree = false;
double mins = 0;

for(int i = 0; i < 1000; i += 60) {
    double rand1 = generator.nextDouble();
    double rand2 = generator.nextDouble();

    if(rand1 < .16)
        landingQueue.enqueue(rand1);
    if(rand2 < .14)
        takeOffQueue.enqueue(rand2);

    if(mins == 0)
        runwayIsFree = true;
    if(runwayIsFree) {
        if(!landingQueue.isEmpty()) {
            landingQueue.dequeue();
            mins = 3;
        }
        else if(!takeOffQueue.isEmpty()) {
            takeOffQueue.dequeue();
            mins = 2;
        }
    }
    else
        mins--;

}

1 个答案:

答案 0 :(得分:0)

如你所述,队列在for循环中被随机排队并随机出队。

从这个意义上讲,你是否可以将变量放在for循环中,以便

int averageLandingQueue = 0;
int averageTakeOffQueue = 0;

然后在for循环中

averageLandingQueue += landingQueue.size();
averageTakeOffQueue += takeOffQueue.size();

最后在for循环之后,

averageLandingQueue/=ITERATIONS;
averageTakeOffQueue/=ITERATIONS;

也许平均时间可以用类似的方式完成。