2013-04-01 26 views
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]); 
    } 
} 
+0

當然,它是隨機的。 –

回答

-1

Random函數根據執行的時間生成一個數字。由於for循環非常快,隨機函數會生成相同的數字。嘗試使用循環中的代碼創建一個新函數並從循環中調用它。

+0

這是不真實的。來自相同種子的兩個隨機數生成器生成相同的序列。一個隨機生成器_可以生成相同的數字 - 它只是簡單地對均勻分佈進行採樣。 –

0

Oki到目前爲止我已經設法通過使用另一個類中的方法輸出客戶名稱和服務時間來實現循環。然而,如果用戶輸入第n個收銀員數量,基本上意味着整個循環將運行x(第n個收銀員輸入),Im仍然停留。

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); 
     } 
    }