0
 public class Queue {

  public static void main(String[] args) {

     Queue<Integer> myQueue = new LinkedList<Integer>();
     Random generator  = new Random();

     int totalTime = 60;
     int lineSize=0;
     int serviceTime;
     int currentPatronTimeLeft=50;
     int timeKeeper;
     int newPatron; 
     int totalCheckedOut=0;



     do
     {
        //for new customer 25%of the time
        serviceTime = generator.nextInt(5) + 1;
        newPatron = generator.nextInt(4) + 1;
     //nested if else to control the adding and removing of items based on service time and the 25% stat 
        if(newPatron == 1)
        {
           myQueue.add( new Integer(serviceTime));
           System.out.println("a new customer has been added to line");
           lineSize++;
           System.out.println("The Queue size is now: "+ lineSize);
           currentPatronTimeLeft = myQueue.peek();

        }
        else if(currentPatronTimeLeft == 0 && lineSize != 0)
        {
           myQueue.poll();
           lineSize--;   
           System.out.println("A customer has been removed from the queue");
           totalCheckedOut++;

           System.out.println("The Queue size is now: "+ lineSize);
        }
        else if (lineSize != 0)
        {
           currentPatronTimeLeft =myQueue.peek();
        }


        currentPatronTimeLeft--;
        totalTime--;
        System.out.println();
        System.out.println("---------------------------------------------------");

     }while(totalTime != 0);





     System.out.println();

  }

}

我无法让我的程序在他们应该完成他们的 serviceTime 之后从队列中删除他们。任何帮助将不胜感激。该程序产生的输出有点像这样

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 1

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 2

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 3

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 4

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 5

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 6

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 7

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 8

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 9

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 10

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 11

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 12

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 13

---------------------------------------------------
a new customer has been added to line
The Queue size is now: 14

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------
4

3 回答 3

2

从您的代码中删除以下条件:

else if(lineSize != 0)
 {
           currentPatronTimeLeft =myQueue.peek();
 }

它应该可以正常工作

于 2013-02-21T08:56:41.803 回答
0

您所做的 if-else 有问题, currentPatronTimeLeft 将始终是第一个元素,因此永远不会达到零。一个快速的解决方法是将另一个变量用于这些目的之一。

于 2013-02-21T08:59:40.070 回答
0

您的问题在于这部分代码:

else if (lineSize != 0)
{
    currentPatronTimeLeft =myQueue.peek();
}
currentPatronTimeLeft--;

如果没有人被添加到队列中,并且当前没有完成,则更新currentPatronTimeLeft为当前客户端的起始值。之后你递减它。如果在下一次迭代中,没有新客户端添加到队列中,那么当前客户端将不会完成,因为他的剩余时间是他从开始的时间 - 1。然后currentPatronTimeLeft在递减之前再次更新到它的起始值。这样它就永远不会变成0。

解决方案:

else if(currentPatronTimeLeft == 0 && lineSize != 0)
{
    myQueue.poll();
    lineSize--;
    // insert following lines:
    if (lineSize > 0) {
        currentPatronTimeLeft =myQueue.peek() + 1; // +1 <--> following decrement
    }
    // end of my insert
    System.out.println("A customer has been removed from the queue");
    totalCheckedOut++;
    System.out.println("The Queue size is now: "+ lineSize);
}

必须摆脱整个else if (lineSize != 0)街区。

于 2013-02-21T08:56:07.903 回答