2017-04-15 66 views
0

当前我正在使用队列,并且已经编写了将队列添加到队列中的排队方法。每当队列满了,我会返回一条消息,指出队列不能再插入任何元素。现在我的任务是以每次尝试插入元素时将数组大小限制加倍的方式更改enqueue方法,以便理论上该项目将被添加到新的展开数组中,并且它永远不会失败到一个完整队列中。我怎么能做到这一点,任何事情都有帮助。排队方法,当队列已满时增加数组大小

代码

public void enqueue(Object newItem){ 
    if (!isFull()){ 
     back = (back+1) % QUEUE_SIZE; 
     items[back] = newItem; 
     count++; 
     return; 
    } else 
     System.out.println("Trying to enqueue into full queue"); 
} 
+0

欢迎来到stackoverflow,这不是“为我做我的硬”类网站,你会得到的最好的建议是尝试自己做你的硬件。祝你好运! – alfasin

回答

1

您只需创建两倍大小的新数组作为items,那么你所有的物品从items复制并再次拨打您的enqueue方法。

public void enqueue(Object newItem){ 
    if (!isFull()){ 
     ... 
    } else { 
     Object[] newItems = new Object[items.length * 2]; 
     copyFromTo(items, newItems); 
     items = newItems; 
     enqueue(newItem); 
    } 
} 
+0

对于copyFromTo,我需要创建一个新的方法吗? – Alan

+0

没错。只需遍历'items'并将值分配给'newItems'。 – alayor

+0

很好,谢谢你的帮助。 – Alan