我一直收到错误消息,指出存在不兼容的类型。我直接从书中复制了这个,因为我们应该对代码进行更改以增强战争游戏。我已完成并编译了所有其他类,但这一个给了我适合。这是代码:
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;
}
}
错误发生在数据[size] = target的push()方法中;线。
EDIT ::: 我现在收到这个错误。 “type Stack不带参数 public class ArrayStack实现Stack“
堆栈类如下。
public interface Stack<E> {
public boolean isEmpty();
public E peek();
public E pop();
public void push(E target);
}
答案 0 :(得分:1)
将Object
更改为E
作为push()
方法的参数类型。
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];
}
现在你的班级是完全通用的。
答案 1 :(得分:0)
push
方法不像类的其他方法那样通用,将其更改为:
public void push(E target) {
if (isFull()) {
stretch();
}
data[size] = target;
size++;
}
在任何情况下,JDK都附带满足您要求的班级ArrayDeque
,而不是从书中粘贴的代码。
ArrayDeque<YourObj> stack = new ArrayDeque<YourObj>();
stack.push(new YourObj());
YourObj head = stack.peek();
head = stack.pop();