Salve
Non riesco a fare un esercizio che il prof ci ha assegnato

in breve ho una classe ArrayStack con tutti i metodi implementati
questa classe funziona in modo che l'utente possa inserire elementi all'interno, infatti all'interno della classe c'è dichiarato un array
Object S[] = new Object[10];

ed un metodo per inserire elementi allinterno dell'array

public void Push(Object element) throws FullStackException {
if(Size()==capacity-1)
throw new FullStackException("Stack pieno");
top++;
S[top]=element;
}

spero di aver spiegato bene fin qui

adesso arriva il problema, infatti devo creare una nuova classe "EspandiArrayStack" che servirà per non avere limiti nell'aggiungere elementi.

Quindi la classe deve espandere ArrayStack e deve riscrivere il metodo Push in modo quando invocato con array non pieno, effettua l'inserimento, mentre quando invocato con array pieno mi raddoppia la capacità ed evita quindi la FullStackException.

Tutto questo usando sempre lo stack senza metodi altrui.

Quindi ho proceduto così

nel costruttore

ho fatto così



public class EspandiArrayStack extends ArrayStack {
private int capacità;
public EspandiArrayStack (int capacity)
{
super(capacity);
capacità=capacity;
}


public void Push (Object element)
{
if(super.Size()==capacità-1)
{

System.out.println("Stack Pieno ... Espansione Stack in corso");
capacità*=2;//Raddoppia capacità stack
ArrayStack appoggio = new ArrayStack(capacità);
while(!isEmpty())
{
appoggio.Push(Pop());//Svuota This e riempio Appoggio
}

******************************************
******************************************
******************************************
******************************************
******************************************
******************************************
******************************************
******************************************


while(appoggio.isEmpty())
{
Push(appoggio.Pop());//Riempie This e svuota appoggio
}


System.out.println("Espansione effettuata con successo");
}
super.Push(element);//Aggiungo elemento passato
}

}


dove ci sono gli asterischi sta il problema, quello di ridefinire la classe con la nuova capacità raddoppiata


Sottolineo la descrizione di alcuni metodi usati
// inserisce l'elemento nell'array dichiarato in arraystack
public void Push (Object element) throws FullStackException;

// ritorna l'elemento al top cancellandolo
public Object Pop () throws EmptyStackException;

//Ritorna true se l'array è vuoto
public boolean isEmpty();

//Ritorna quanti elementi ci sono nell'array
public int Size();

top è la variabile che tiene traccia dell'indice dell'ultimo elemento inserito