0

嗨,我正在尝试使用 Java 模拟等待队列。我的程序必须包含的内容:

  • 用户输入第n个收银员
  • 至少有 10 位客户将随机到达队列中。
  • 当收银员空闲时,将处理下一个客户所在的行。
  • 程序必须输出队列的每个阶段以及每个客户在队列中花费的时间。

Oki 所以我有一个空队列对象,一个将字符串发送到队列的随机字符串列表生成器。

但是我遇到的问题是随机字符串生成器在循环中选择重复项,我该如何解决这个问题?另外我如何让它以 0.5 秒的间隔将客户发送到队列,我需要记录他们进入队列和离开队列的时间,这样我就可以输出在队列中花费的时间。我卡住了不知道现在该怎么办?

public static Queue<String> line = new  LinkedList<String> ();

public static void main(String[] args) 
{
    String[] list = {"a", "b", "c", "e", "f", "g", "h", "i", "j", "k", };
    int customer = list.length;

    for (int x = 0; x < customer; x++ )
    {
      int cus = (int) (Math.random() * customer);
      line.add(list[cus]);
    }
}
4

4 回答 4

0

您应该熟悉System.currentTimeMillis()Thread.sleep()。你应该考虑一个你工作的循环(消费/生产),然后休眠 500 毫秒,然后再次继续循环。

于 2013-04-01T19:13:11.463 回答
0

到目前为止,Oki 已经设法通过使用另一个类中的方法来输出客户名称和服务时间,从而使循环工作。但是,如果用户输入第 n 个收银员,我仍然坚持,这基本上意味着整个循环将运行 x(输入的第 n 个收银员)。

 Random ran = new Random();
    while (!line.isEmpty())
    {
        System.out.println(line  + "\n");
        System.out.println("The queue has " + line.size() + " customers left");
        Customer cus = line.remove();
        System.out.println(cus.name + " queued at " + cus.getTime() + " <=== SERVED" + "\n");
        // you will have to sleep a random number of seconds here
        int wait = ran.nextInt(2) + 1;  // will generate 1 or 2
        try 
        {
             Thread.sleep(wait * 1000);
        }
        catch(Exception e) 
        {
            System.out.println("Sleep error: " + e);
        }
    }
于 2013-04-02T21:28:25.313 回答
0

听起来很熟悉的问题:生产者消费者问题

于 2013-04-01T19:10:22.620 回答
-1

Random 函数根据执行的时间生成一个数字。因为 for 循环非常快,所以 random 函数会生成相同的数字。尝试使用循环中的代码创建一个新函数并从循环中调用它。

于 2013-04-01T19:08:00.920 回答