在do while循环中获取要从队列中删除的项目

时间:2013-02-21 08:42:37

标签: java queue do-while

 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

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

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

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

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

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

从代码中删除以下条件:

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

它应该可以正常工作

答案 1 :(得分: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)阻止。

答案 2 :(得分:0)

你遇到的if-else有问题,currentPatronTimeLeft将永远是第一个元素,因此永远不会达到零。快速修复将使用另一个变量用于其中一个目的。