我正在尝试使用Java模拟等待队列。我的课程必须包括:
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]);
}
}
答案 0 :(得分:0)
听起来像是一个熟悉的问题:Producer consumer problem
答案 1 :(得分:0)
您应该熟悉System.currentTimeMillis()和Thread.sleep()。你应该考虑一个你工作的循环(消耗/产生),然后休眠500毫秒,然后再继续循环。
答案 2 :(得分: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);
}
}
答案 3 :(得分:-1)
Random函数根据执行的时间生成一个数字。因为for循环非常快,所以随机函数生成相同的数字。尝试使用循环中的代码创建一个新函数并从循环中调用它。