2013-04-01 2 views
0

Привет, я пытаюсь имитировать очередь ожидания с помощью Java. Что моя программа должна состоять из:Моделирование очередей

  • Устройство пользовательского ввода энного количества кассиров
  • Там минимум 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]); 
    } 
} 
+0

Конечно, это случайно. –

ответ

-1

Функция Random генерирует число, основанное на выполненном времени. Поскольку цикл for довольно быстро, случайная функция генерирует одинаковое число. Попробуйте сделать новую функцию с кодом в цикле и вызвать его из цикла.

+0

Это неверно. Два генератора случайных чисел из одного и того же семестра генерируют одну и ту же последовательность. Случайный генератор _may генерирует одни и те же числа - это просто выборка для равномерного распределения. –

0

Вы должны ознакомиться с System.currentTimeMillis() и Thread.sleep(). Вы должны подумать о петле, где вы работаете (потребляете/производят), а затем спите в течение 500 миллисекунд, а затем продолжаете цикл снова.

0

Oki До сих пор Ive удалось получить цикл работы с выдачей имени клиента и временем их обслуживания с использованием методов в другом классе. Однако Im все еще застрял, если пользователь вводит 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); 
     } 
    } 
Смежные вопросы