Java堆栈无法在数组类型E[]上调用push(E)

Java堆栈无法在数组类型E[]上调用push(E),java,data-structures,stack,Java,Data Structures,Stack,我有个问题。我知道如果我的堆栈已满,我必须分配一个两倍大小的新堆栈。我曾尝试使用临时堆栈,但在编译过程中,我在55行上看到一个错误。错误为“无法对数组类型E[]调用推送(E)”。我不知道为什么我不能这样做 package stack; import exception.EmptyStackException; import exception.FullStackException; public class ArrayStack<E> implements Stack<E

我有个问题。我知道如果我的堆栈已满,我必须分配一个两倍大小的新堆栈。我曾尝试使用临时堆栈,但在编译过程中,我在55行上看到一个错误。错误为“无法对数组类型E[]调用推送(E)”。我不知道为什么我不能这样做

package stack;

import exception.EmptyStackException;

import exception.FullStackException;

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

protected int capacity;
protected static final int CAPACITY = 1000;
protected E S[];
protected int top = -1;

@SuppressWarnings("unchecked")
public ArrayStack(int capacity){
    this.capacity = capacity;
    this.S = (E[]) new Object[this.capacity];
}

public ArrayStack(){
    this(CAPACITY);
}

@Override
public int size() {
    return top+1;
}

@Override
public boolean isEmpety() {
    return (this.top < 0);
}

@Override
public E top() throws EmptyStackException {
    if(isEmpety())
        throw new EmptyStackException("Stack Vuoto.");
    return this.S[top];
}

@Override
public void push(E element) throws FullStackException, EmptyStackException {
    if(size() == capacity){
        this.tempStack();

    }
    //throw new FullStackException("Stack Pieno.");
    this.S[++top] = element;
}

private void tempStack(){
    E tempS[] = (E[]) new Object[this.capacity];
    E tempEl;
    while(isEmpety()){
        tempEl = this.pop();
        tempS.push(this.pop());
    }
    this.capacity += this.capacity;
    this.S = null;
    this.S = (E[]) new Object[this.capacity];
}

public void union(Stack<E> s){

}

@Override
public E pop() throws EmptyStackException {
    E element;
    if(isEmpety())
        throw new EmptyStackException("Stack Vuoto.");
    element = S[top];
    this.S[top--] = null;
    return element;
}

}
包栈;
导入异常。EmptyStackException;
导入异常。FullStackException;
公共类ArrayStack实现堆栈{
受保护的内部容量;
受保护静态最终int容量=1000;
受保护的E-S[];
受保护的int top=-1;
@抑制警告(“未选中”)
公共阵列堆栈(内部容量){
这个。容量=容量;
this.S=(E[])新对象[this.capacity];
}
公共阵列堆栈(){
这(能力);
}
@凌驾
公共整数大小(){
返回顶部+1;
}
@凌驾
公共布尔值Isempty(){
返回值(该值小于0);
}
@凌驾
public E top()引发EmptyStackException{
if(isempty())
抛出新的EmptyStackException(“堆栈Vuoto”);
返回这个.S[top];
}
@凌驾
public void push(E元素)抛出FullStackException、EmptyStackException{
if(size()=容量){
这个.tempStack();
}
//抛出新的FullStackException(“Stack Pieno”);
this.S[++top]=元素;
}
私有void tempStack(){
E tempS[]=(E[])新对象[this.capacity];
坦普尔;
while(isEmpety()){
tempEl=this.pop();
tempS.push(this.pop());
}
this.capacity+=this.capacity;
这个.S=null;
this.S=(E[])新对象[this.capacity];
}
公共无效联合(s){
}
@凌驾
public E pop()引发EmptyStackException{
E元素;
if(isempty())
抛出新的EmptyStackException(“堆栈Vuoto”);
元素=S[top];
this.S[top--]=null;
返回元素;
}
}

tempS
不是一个
堆栈
,因此不能为此变量调用
堆栈
的方法

您的
tempStack
方法应该做的是创建一个容量更大的数组,将
this.S
复制到新数组中,并将该数组分配给
this.S

E tempS[] = (E[]) new Object[this.capacity];

tempS是一个数组,不是一个堆栈,所以你不能在它上面调用push方法

我们也不知道,为什么你要在
数组
对象上调用不存在的方法
push
。如果(size()==capacity){this.capacity+=this.capacity;E tempS[]=(E[])new object[this.capacity];tempS=this.S;this.S=null;this.S=(E[])新对象[this.capacity];this.S=tempS;}在tempStack中复制this.S时,大小保持不变size@MarcoFerraioli
tempS=this.S
不会将this.S复制到tempS,它只是复制引用。您应该使用Arrays.copyOf将原始数组的元素复制到目标数组。