0

こんにちは、Java を使用して待機キューをシミュレートしようとしています。私のプログラムは次のもので構成されなければなりません:

  • ユーザーが入力した n 番目のレジ係数
  • ランダムな間隔で、最低 10 人の顧客がキューに到着します。
  • レジが空いたら、次のお客様の列が処理されます。
  • プログラムは、キューの各段階と、各顧客がキューで費やした時間を出力する必要があります。

沖だから私が持っているのは、空のキューオブジェクト、つまり文字列をキューに送信するランダム文字列リストジェネレーターです。

ただし、ランダム文字列ジェネレーターがループ内で重複を選択しているという問題があります。これを修正するにはどうすればよいですか? また、顧客を 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

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

System.currentTimeMillis()Thread.sleep()に慣れる必要があります。作業 (消費/生成) を行い、500 ミリ秒間スリープしてから、再びループを続けるループについて考える必要があります。

于 2013-04-01T19:13:11.463 に答える
0

おなじみの問題のように聞こえます:生産者と消費者の問題

于 2013-04-01T19:10:22.620 に答える
-1

Random 関数は、実行された時間に基づいて数値を生成します。for ループは非常に高速であるため、random 関数は同じ数を生成します。ループ内のコードで新しい関数を作成し、ループから呼び出してみてください。

于 2013-04-01T19:08:00.920 に答える