java - 使用 LinkedQueue 模拟购物线

标签 java queue

我只是在寻找一个技巧来帮助我开始这个程序,这样我就可以有多个“行”。我目前有 1 行,正在尝试添加另外两行(LinkedQueues)。我需要编写一个包含 3 行的程序。而不是只有一行。我只是在寻找一些可能的帮助来尝试启动这个程序

public class WaitLine
{
  private QueueInterface<Customer> line, line2, line3;
  private int numberOfArrivals;
 // private int numberOfArrivals1;
  //private int numberOfArrivals2;
  //private int numberOfArrivals3;
  private int numberServed;
  private int totalTimeWaited;

  public WaitLine()
  {
    line = new LinkedQueue<>();
    line2 = new LinkedQueue<>();
    line3 = new LinkedQueue<>();

    reset();
  } // end default constructor

  /** Task: Simulates a waiting line with one serving agent.
   *  @param duration  the number of simulated minutes 
   *  @param arrivalProbability  a real number between 0 and 1, and the
   *                             probability that a customer arrives at
   *                             a given time
   *  @param maxTransactionTime  the longest transaction time for a
   *                             customer */ 
  public void simulate(int duration, double arrivalProbability, 
                       int maxTransactionTime)
  {
    int transactionTimeLeft = 0;

    for (int clock = 0; clock < duration; clock++) {
      if (Math.random() < arrivalProbability) {
        numberOfArrivals++;
        int transactionTime = (int)(Math.random() * maxTransactionTime + 1);
        Customer nextArrival = new Customer(clock, transactionTime, numberOfArrivals);
        line.enqueue(nextArrival);

        System.out.println("Customer " + numberOfArrivals 
                         + " enters line at time " + clock 
                         + ". Transaction time is " + transactionTime);

      } // end if

      if (transactionTimeLeft > 0)
        transactionTimeLeft--;

      else if (!line.isEmpty())
      {
        Customer nextCustomer = line.dequeue();
        transactionTimeLeft = nextCustomer.getTransactionTime() - 1;
        int timeWaited = clock - nextCustomer.getArrivalTime();
        totalTimeWaited = totalTimeWaited + timeWaited;
        numberServed++;
        System.out.println("Customer " + nextCustomer.getCustomerNumber()
                         + " begins service at time " + clock 
                        + ". Time waited is " + timeWaited);


      } // end if
    } // end for
  } // end simulate

  /** Task: Displays summary results of the simulation. */ 
  public void displayResults()
  {
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    System.out.println();
    System.out.println("LINE 1:");
    System.out.println("Number served = " + numberServed);
    System.out.println("Total time waited = " + totalTimeWaited);
    double averageTimeWaited = ((double)totalTimeWaited) / numberServed;
    System.out.println("Average time waited = " + averageTimeWaited);
    int leftInLine = numberOfArrivals - numberServed;
    System.out.println("Number left in line = " + leftInLine);
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    System.out.println();
    System.out.println("LINE 2:");
    System.out.println("Number served = " + numberServed);
    System.out.println("Total time waited = " + totalTimeWaited);
    System.out.println("Average time waited = " + averageTimeWaited);
    System.out.println("Number left in line = " + leftInLine);
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    System.out.println();
    System.out.println("LINE 3:");
    System.out.println("Number served = " + numberServed);
    System.out.println("Total time waited = " + totalTimeWaited);
    System.out.println("Average time waited = " + averageTimeWaited);
    System.out.println("Number left in line = " + leftInLine);
  } // end displayResults

  /** Task: Initializes the simulation. */ 
  public final void reset()
  {
    line.clear();

    numberOfArrivals = 0;
    numberServed = 0;
    totalTimeWaited = 0;
  } // end reset
} // end WaitLine

最佳答案

也许 WaitLine 类必须只代表一行。从类成员中删除 line2, line3。然后添加另一个客户端类,该类将根据需要创建任意数量的 WaitLine 实例,并循环或并发调用它们的方法。

关于java - 使用 LinkedQueue 模拟购物线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60133223/

相关文章:

java - 在 google app engine for java 中使用 xml rpc 客户端 - 超时时间为 30 秒? - 如何使用低级 API 进行访问

Java : split string to char array using regex

python - 检查元组的 priorityQueue 中是否存在元素

python - 列表的哪一端是顶部?

sql-server - Sql Service Broker 和事务

java - 如何在 Swing 中单击时放置图像?

java - 从jdk1.5迁移到jdk1.7时的证书问题

java - 从级别顺序输入创建二叉树

JAVA 队列 - 单元测试失败

Java杀死弹出进程