2010-09-18 85 views
0

我正在按照我的講師的要求用ArrayList編寫一個deque實現。到目前爲止類的身體看起來像這樣將二進制文件讀取到一個deque的問題

try { 
     while (!endOfFile) { 
      character = inputFile.readChar(); 
      while (!character.equals('\u0003')) { 
       if (character.equals('\u0008')) 
        deck.removeBack(); 
       else 
        deck.addToBack(character); 
      } 
     } 

     while (!deck.isEmpty()) { 
      character = deck.removeFront(); 
      if (character.equals('\u0003')) 
       System.out.print("\n"); 
      else 
       System.out.print(character); 
     } 
    } catch (EOFException e) { 
     endOfFile = true; 
    } 

Deque<Character> = new deck Deque<Character>() 

我測試過我的Deque一個單獨的測試類,我敢肯定,它的正常工作的雙端隊列初始化。但是每次我嘗試運行這個讀取的類時,都會在deck.addToBack(character)行處導致java.lang.OutOfMemoryError。什麼導致了這個問題,怎麼可能避免?

編輯:我執行的Deque。界面由我的導師提供。

import java.util.*; 
public class Deque<T> extends ArrayList<T> implements DequeInterface<T> { 

public Deque() 
{ 
    super(); 
} 

public void addToFront(T newEntry) { 
    add(0, newEntry); 
} 

public void addToBack(T newEntry) { 
    add(newEntry); 
} 

public T removeFront() { 
    T entry = null; 
    entry = get(0); 
    remove(0); 
    return entry; 
} 

public T removeBack() { 
    T entry = null; 
    entry = get(size() - 1); 
    remove(size() - 1); 
    return entry; 
} 

public T getFront() { 
    T entry = get(0); 
    return entry; 
} 

public T getBack() { 
    T entry = get(size() - 1); 
    return entry; 
} 

public boolean isEmpty() { 
    if (size() == 0) 
     return true; 
    else 
     return false; 
} 

public void clear() { 
    clear(); 
} 

}

+0

如果您的deque實現導致OutOfMemoryError,這意味着您應該檢查實現本身。不是測試代碼。現在沒有辦法告訴錯誤原因。 – 2010-09-18 16:02:39

+0

謝謝。實施增加了。請看一下。 – Francis 2010-09-18 16:06:46

回答

1
while (!endOfFile) { 
     character = inputFile.readChar(); 
     while (!character.equals('\u0003')) { 
      if (character.equals('\u0008')) 
       deck.removeBack(); 
      else 
       deck.addToBack(character); 
     } 
    } 

檢查外循環的退出條件。

readChar返回-1表示數據結束?這可能會導致無限循環,導致內存耗盡。

+0

它是否表示數據正常結束?我將如何防止它? – Francis 2010-09-18 16:24:59

+0

@Francis - 不知道'inputFile'的類型是不可能的。檢查它的文檔:http://download.oracle.com/javase/6/docs/api/但我的主要觀點是,如果循環內沒有更改'endOfFile',循環將永遠不會退出。 – McDowell 2010-09-18 20:11:25