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

Rispondi quotando