0

プログラムが食料品店をシミュレートしているキュープロジェクトに取り組んでいます。私のプログラムには、キュー内の顧客にサービスを提供するのにかかる時間を表す確率変数を設定するメソッド呼び出しがあります。反復の合計は 60 で、分を表します。最初の顧客に 4 分間の待ち時間が与えられた場合、1 分ごとに 0 になるまで時間を減らす必要があるとしますmyQueue。1分ごとにキューに保存されている値を減らす方法はありますか?

import java.util.*;
import java.util.Random;

public class GroceryStore{
public static void main (String[] args){

int newCust=0;  //to hold random variable 1-4 for 25% chance of new customer
Queue<Integer> myQueue = new LinkedList<Integer>(); //instantiates new queue
int wait = 0;
int numCust = 0;                        //holds counter for number of  customer             

for (int i = 1; i <= 60; i++)  //iterator to cycle through 60 minutes
{

    Random randomNum = new Random();    
    newCust = randomNum.nextInt(4)+1;  //gives random #1-4, if 1, new cust added

    if(newCust == 1)                            //if statement to execute code if new cust added
    {
        Customer cust = new Customer();
        wait = cust.getServiceTime();                                           //stores wait time in variable
        myQueue.add(wait);                                                      //adds customer to the queue by wait time
        System.out.println("New customer added to queue, queue length is now " + myQueue.size());                       
    }

    if(myQueue.isEmpty())                                       //if to check if queue is empty and skip other conditionals
        System.out.println("-----------");
    else if(myQueue.peek()==0)                                  //if top of queue is at 0, remove from queue
    {
        myQueue.remove();
        System.out.println("Customer removed");
    }
    else    
          //THIS IS WHERE I AM TRYING TO DECREASE THE VALUE IN THE TOP QUEUE
}
4

2 に答える 2

1

Integerは不変なのでint、独自のクラスでラップします。

class Customer {

    int time;

    public Customer(int time) {
        this.time = time;
    }

    // getter, setter
}

対応するものを定義しますQueue

Queue<Customer> myQueue = new ...;

をインスタンス化しjava.util.Timerます; 対応するで、 for-eachループを使用してjava.util.TimerTask繰り返し、それぞれを順番に変更または削除します。Queue

for (Customer c : myQueue) { ... }
于 2012-09-24T00:57:29.860 に答える
0

キューの一番上にあるCustomerオブジェクトに格納されている値をデクリメントしたい。

最も簡単な方法は、Customerクラス内のserviceTimeを短縮するメソッドを追加することです。

public decServiceTime() {
  serviceTime--;
}

キューにあるCustomerオブジェクトに関連付けられた値を確認すると、必要なアクションを実行できます。

また、ご不明な点がございましたら、まずTAにメールを送信してみてください。=)

于 2012-09-28T08:37:30.393 に答える