簡體   English   中英

在Java中實現雙端隊列的問題

[英]Problems with implementing a deque in java

抱歉,僅關注我在這里遇到的問題: 在這里,我試圖運行此方法以從雙面隊列(雙端隊列)中刪除通用值(EltType),但在此過程中我不斷收到錯誤,我兩次調用insertFirst ,然后將值“ 3”插入數組兩次,然后,當我運行removeFirst時,它將打印出“ 3”一次,然后打印出“ Null”。 有人能幫我嗎?

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;
  }

}

謝謝 :)

明顯的問題是, 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 ,無論如何,這段代碼有什么問題?

刪除元素時,您還需要更新結束指針。

您還應該調查System.arrayCopy()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM