将二进制文件读取到双端队列的问题

时间:2010-09-18 15:51:16

标签: java deque

我正在根据我的教师的要求用ArrayList编写一个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初始化为

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

我用一个单独的测试类测试了我的Deque,我很确定它正常工作。但是每次我尝试运行这个读类时,都会在deck.addToBack(字符)行引起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();
}

}

1 个答案:

答案 0 :(得分:1)

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

检查外环退出条件。

readChar是否返回-1表示数据结束?这可能会导致无限循环,从而导致内存耗尽。