0

我正在按照讲师的要求使用 ArrayList 编写双端队列实现。到目前为止,类的主体看起来像这样

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。是什么导致了问题,如何避免?

编辑:我的双端队列实现。界面由我的导师提供。

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

}

4

1 回答 1

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

检查您的外循环退出条件。

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

于 2010-09-18T16:10:01.730 回答