首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >排队模拟计算顾客等待时间

排队模拟计算顾客等待时间
EN

Stack Overflow用户
提问于 2014-11-19 05:25:43
回答 2查看 9.5K关注 0票数 1

在过去的10-12小时里,我一直在努力解决这个问题,我想知道你们是否能帮我调试/指出正确的总体方向。该程序的目标是模拟快餐店队列,我正在尝试使用以下方法来完成:

PriorityQueue (FIFO)数据结构

我咨询过同事、校内辅导服务、教授和课程教科书:"Java如何编程: Deitel & Deitel“,但都没有用。

为该问题提供的伪代码如下(我不想让您为我做这件事):

代码语言:javascript
复制
BigBurger Inc. wants to see if having a single person at the counter both to take orders and to serve them is feasible. At each BigBurger, customers will arrive and get in line. When they get to the head of the line they will place their order, which will be assembled and served to them. Then they will leave the BigBurger and the next person in line will be able to order.
We need to know how long a customer may be forced to wait before he or she can place an order. Given a script that lists each customer for a typical day, we want to calculate the maximum customer waiting time. Each customer in the script is characterized by an arrival time (measured in minutes after the store opened) and a service duration (the number of minutes between ordering and getting the food).
Create a class BigBurger that contains method maxWait that is given a int[] arrival and a int[] service describing all the customers and returns the maximum time spent by a customer between arriving and placing the order. Corresponding elements of arrival and service refer to the same customer, and they are given in the order in which they arrive at the store (arrival is in non-descending order).
If multiple customers arrive at the same time they will all join the line at the same time, with the ones listed earlier ahead 
of ones appearing later in the list.
Definition
    
Class:
BigBurger
Method:
maxWait
Parameters:
int[], int[]
Returns:
int
Method signature:
int maxWait(int[] arrival, int[] service)
(be sure your method is public)
    
Constraints-
arrival will contain between 1 and 50 elements inclusive-
service will contain the same number of elements as arrival-
the elements of arrival will be in non-decreasing order-
each element of arrival will be between 1 and 720 inclusive-
each element of service will be between 1 and 15 inclusive

Examples    
{3,3,9}
{2,15,14}
Returns: 11
Two customers arrive at time 3. The first one waits 0 time, orders, and is served after 2 minutes, leaving at time 5. The second one then orders and is served at time 20. Meanwhile a customer arrives at time 9 and waits until the second customer leaves. This last customer then orders at time 20, and is served and leaves at time 20+14 = 34. The first customer waited 0 minutes, the second waited 2 minutes (from time 3 to time 5), and the last customer waited 11 minutes (from time 9 to time 20).

我已经在网上研究过了,通常是用系统纳米时间或随机方法来计算到达时间,但在这种情况下,实例中已经给出了到达时间和服务时间,我必须计算每个客户的总等待时间。请指导我通过这个,因为我是新的编码。

我所遇到的问题:

当我在方法maxWaitTime (int[],int[])中调用返回maxWaitTime时,无法为客户打印maxWait

这是我的代码:

代码语言:javascript
复制
import java.util.*;


public class QueueProgram 
{
    static int[] arrival = {3,3,9};
    static int[] service = {2,15,14};

    int waitTime;
    int finishTime;
    int serviceTime;
    static int index;


    Queue<Integer> Customers = new LinkedList<Integer>();


    public int maxWait(int[] arrival, int[] service)
    {
        //this.arrival = arrival;
        //this.service = service
        int maxWaitTime = 0;
        int[]finishTime = new int[arrival.length];

        for(int i=0; i<arrival.length;i++)
        {
            int startTime;
            index = i;
            if(index == 0)
            {
                 startTime = arrival[index];
                 System.out.println(startTime);
            }
            else
            {
                startTime = Math.max(arrival[i],finishTime[i-1]);
            }
            finishTime[i] = startTime + service[i];
            waitTime = finishTime[i] - service[i] - arrival[i];

            if(waitTime > maxWaitTime)
            {
                maxWaitTime = waitTime;
            }
        }
        return maxWaitTime;
    }

    public static void main(String[] args) 
    {
        QueueProgram q = new QueueProgram();
        q.maxWait(arrival, service);
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-19 07:09:37

代码语言:javascript
复制
import java.util.*;


public class QueueProgram 
{
    static int[] arrival = {3,3,9};
    static int[] service = {2,15,14};

    int waitTime;
    int finishTime;
    int serviceTime;
    static int index;

    Queue<Integer> Customers = new LinkedList<Integer>();   

    public int maxWait(int[] arrival, int[] service)
    {
        //this.arrival = arrival;
        //this.service = service
        int maxWaitTime = 0;
        int[]finishTime = new int[arrival.length];

        for(int i=0; i<arrival.length;i++)
        {
            int startTime;
            index = i;
            if(index == 0)
            {
                 startTime = arrival[index];
                 //System.out.println(startTime);
            }
            else
            {
                startTime = Math.max(arrival[i],finishTime[i-1]);
            }
            finishTime[i] = startTime + service[i];
            waitTime = finishTime[i] - service[i] - arrival[i];

            if(waitTime > maxWaitTime)
            {
                maxWaitTime = waitTime;
            }
        }
        return maxWaitTime;
    }

    public static void main(String[] args) 
    {
        QueueProgram q = new QueueProgram();
        q.maxWait(arrival, service);
        System.out.println("Maximum wait time is: " + q.maxWait(arrival, service));
    }

}
票数 1
EN

Stack Overflow用户

发布于 2014-11-19 08:54:04

变量index是多余的,i已经表示数组索引。其次,waitTime可以计算为finshTime[i-1]-arrival[i],不需要计算startTime。较小的操作,更好的空间和时间复杂度。

试试这个:

代码语言:javascript
复制
   for(int i=0; i<arrival.length;i++)
    {       
      if(i != 0) { 
        waitTime = finishTime[i-1] - arrival[i];
        if(waitTime > maxWaitTime)
        { maxWaitTime = waitTime;}
      }
      finishTime[i] = arrival[i] + service[i];         
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27009596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档