1

互換性のない型があるというエラーが表示され続けます。ゲーム・オブ・ウォーを強化するためにコードを変更する必要があるため、これを本から直接コピーしました。私は他のすべてのクラスを完成させてコンパイルしましたが、これは私にぴったりです。コードは次のとおりです。

public class ArrayStack<E> implements Stack<E> {

private E[] data;

private int size;

public ArrayStack() {
    data = (E[])(new Object[1]);
    size = 0;
}

public boolean isEmpty() {
    return size == 0;
}

public Object pop() {
    if (isEmpty()) {
        throw new EmptyStructureException();
    }
    size--;
    return data[size];
}

public Object peek() {
    if (isEmpty()) {
        throw new EmptyStructureException();
    }
    return data[size - 1];
}

protected boolean isFull() {
    return size == data.length;
}

public void push(Object target) {
    if (isFull()) {
        stretch();
    }
    data[size] = target;
    size++;
}

protected void stretch() {
    E[] newData = (E[])(new Object[data.length * 2]);
    for (int i = 0; i < data.length; i++) {
        newData[i] = data[i];
    }
    data = newData;
}   
}

data[size] = target; の push() メソッドでエラーが発生しています。ライン。

編集::: 私は今このエラーを受け取っています。「型 Stack はパラメーターを取りません public class ArrayStack は Stack を実装します」

スタッククラスは次のとおりです。

public interface Stack<E> {

public boolean isEmpty();

public E peek();

public E pop();

public void push(E target);

}
4

2 に答える 2

1

メソッドのパラメーターの型として に変更Objectします。Epush()

public void push(E target) {
    if (isFull()) {
        stretch();
    }
    data[size] = target;
    size++;
}

同様に、 と の宣言戻り型も に変更する必要がpop()ありpeek()ますE

public E pop() {
    if (isEmpty()) {
        throw new EmptyStructureException();
    }
    size--;
    return data[size];
}

public E peek() {
    if (isEmpty()) {
        throw new EmptyStructureException();
    }
    return data[size - 1];
}

これで、クラスは完全にジェネリックになりました

于 2013-10-09T23:47:02.317 に答える
1

pushメソッドはクラスの残りの部分のようにジェネリックではないため、次のように変更します。

public void push(E target) {
    if (isFull()) {
        stretch();
    }
    data[size] = target;
    size++;
}

ArrayDequeいずれにせよ、JDKには、本から貼り付けられたコードではなく、要件を満たすクラスが付属しています。

ArrayDeque<YourObj> stack = new ArrayDeque<YourObj>();
stack.push(new YourObj());
YourObj head = stack.peek();
head = stack.pop();
于 2013-10-09T23:47:46.687 に答える