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 が発生します。問題の原因と回避方法

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

}

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 に答える