2015-11-07 28 views
0

我有一个任务,其中我有一个队列(从类ArrayQueues),我应该写一个方法在另一个类(Queues)将队列分成两部分。方法split(队列队列)采用队列并返回另一个队列,其中第一个队列的项目只有一半,但它不仅仅是前半部分或后半部分。它占用原始队列中的所有其他项目并均匀分配项目。这是我会如何看:请帮我发现我的错误。我得到一个空队列,但我期望它有原始队列的一半项目

public class Queues{ 
public static <E> Queue<E> split(Queue<E> queue){ 
    Queue<E> queue1 = new ArrayQueue<>(queue.capacity()); 
    Queue<E> queue2 = new ArrayQueue<>(queue.capacity()); 
    int size = queue.size();//I did this because the size of queue changes after every iteration due to it being dequeued 
    for(int i = 0; i < size;i++){ 
     if(i%2==0){ 
      queue2.enqueue(queue.dequeue());//adds item from queue to queue2 and removes that item from queue 
     }else{ 
      queue1.enqueue(queue.dequeue());//add item from queue to queue1 and removes item from queue 
     } 
    queue = queue1; 
    return queue2; 
    } 
} 

结果我得到的是队列2和队列1都有相应的项目(从队列中所有其他项目)。然而,原来的队列现在是空的,我明白这是因为我已经将它列队出队了。但是我设置了

queue = queue1 

为什么在我将它设置为queue1后它是空的?

回答

1

queue是一个局部变量,所以你不能在方法外部使用它,除非你返回它的值。

+0

谢谢。所以我试图平均分配队列到一个新队列和原始队列中。任何关于如何从我拥有的方面提出的建议?或者我是否以错误的方式去做? – user5362867

+0

调用queue.clear(),然后queue.addAll(queue1)。这应该做到这一点。 – Chicodelarosa

相关问题