2015-03-19 86 views
-1

我有一个问题。我知道如果我的堆栈已满,我必须分配一个双倍大小的新堆栈。我已经尝试使用临时堆栈,但在编译期间,我在55行看到一个错误。错误是“无法在数组类型E []”上调用push(E)。我不知道为什么我不能这样做。Java堆栈无法在阵列类型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; 
} 

} 
+2

我们不知道,为什么你想调用不存在的方法''array'对象push' 。 – Andremoniy 2015-03-19 10:07:20

回答

0

tempS不是Stack,所以你不能调用Stack方法这个变量。

您的tempStack方法应该做的事情可能是创建一个容量较大的阵列,将this.S复制到新阵列并将该阵列分配到this.S

+0

if(size()== capacity){ \t \t \t this.capacity + = this.capacity; \t \t \t E tempS [] =(E [])new Object [this.capacity]; \t \t \t tempS = this.S; \t \t \t this.S = null; \t \t \t this.S =(E [])new Object [this.capacity]; \t \t \t this.S = tempS; \t \t \t \t \t}当我在tempStack复制this.S大小保持老大小 – 2015-03-19 10:38:25

+0

@MarcoFerraioli'临时工= this.S'不this.S复制到临时工,它只是复制了参考。您应该使用Arrays.copyOf将原始数组的元素复制到目标数组。 – Eran 2015-03-19 10:41:16

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

临时工是一个数组不就可以了堆栈所以你不能调用push方法