2011-02-07 63 views
0

對不起,從我在這裏的問題開始:here我試圖運行此方法從雙面隊列(雙端隊列)中刪除一個通用值(EltType),但我保留得到一個錯誤,我調用insertFirst兩次,並將值「3」插入數組兩次,然後,當我運行removeFirst時,它將打印出「3」一次,然後「空」。任何人都可以幫助我嗎?在java中實現雙端隊列的問題

class ArrayBasedDeque<EltType> { 

    private final int CAPACITY = 10; 
    private int capacity; 
    private int end; 
    private EltType deque[]; 

    public ArrayBasedDeque() { 
    this.capacity = CAPACITY; 
    deque = (EltType[]) (new Object[capacity]); 
    } 


public EltType removeFirst() { 
    EltType[] tempArray; 
    EltType returned = deque[0]; 
    tempArray = (EltType[]) new Object[capacity]; 
     for (int i=1;i<capacity;i++) { 
     tempArray[i-1] = deque[i]; 
     } 
     deque = tempArray; 
    return returned; 
    } 


    public boolean isEmpty() { 
    return end == 0; 
    } 

    public void insertFirst(EltType first) { 
    if(!isEmpty()) { 
    EltType[] tempArray; 
    tempArray = (EltType[]) new Object[capacity+1]; 
    for (int i=0;i<deque.length;i++) { 
     tempArray[i+1] = deque[i]; 
    } 
    deque = tempArray; 
    } 
    deque[0] = first; 
    } 

} 

謝謝:)

+0

你爲什麼要投射一個這樣的新陣列?爲什麼不創建這種類型的數組? `deque =(EltType [])(new Object [capacity])` – 2011-02-07 22:39:30

回答

3

大突出的問題是,end永遠不會改變。 isEmpty()將始終返回true。現在我們來看看你的insertFirst()方法。

public void insertFirst(EltType first) { 
    if(!isEmpty()) { 
     EltType[] tempArray; 
     tempArray = (EltType[]) new Object[capacity+1]; 
     for (int i=0;i<deque.length;i++) { 
      tempArray[i+1] = deque[i]; 
     } 

     deque = tempArray; 
    } 
    deque[0] = first; 
} 

明知isEmpty()總是返回true不管是什麼,什麼是這段代碼的問題?

2

你需要太更新結束指針,當你刪除一個元素。

你也應該調查System.arrayCopy()