Newsgroup: it.comp.java
Titolo: [Help]Implementare uno Stack in Java

Salve a tutti,
sto da poco imparando ad usare Java, approfittando di un esercizio
universitario ho cercato di implementare uno stack e i suoi metodi. Lo stack
puo' contenere esclusivamente interi strettamente maggiori di zero. La
struttura dello stack sarà un array chiamato "stackVector" mentre il
puntatore che punta sempre all'ultimo elemento "stackPointer" (che fantasia
eh??). La dimensione dell'array è pari a 10. Ogni qualvolta la pila deve
contenere più elementi di quanti ne possa contenere l'array, la dimensione
di quest'ultimo deve essere raddoppiata. Di seguito un riassunto delle
funzioni dello stack:
push(int e) : inserisce un elemento in cima alla pila
// "e" deve essere strettamente maggiore di zero
pop() : rimuove l'elemento in cima alla pila e lo restituisce
size() : ritorna il numero di elementi contenuti nella pila
isEmpty() : decide se la pila è vuota
top() : restituisce (senza rimuoverlo) l'elemento in cima alla pila
Il problema è il metedo push...in particolare riguarda il raddoppiamento
dell'array...copioincollo il codice del metodo
---------------------------------------------------------------------------
public class Stack
{
     public int stackPointer = -1;
     public int[] stackVector = new int[10];
     public void push(int e)
     {
          if ( e < 1)
          System.out.print("l'elemento da inserire non e' un intero
positivo!!");
          stackPointer++;
          if(stackPointer >= stackVector.length)
             {
                  int[] b = new int[stackVector.length * 2];
// creo array di "appoggio"
                 for ( int i = 0 ; i < stackVector.length ; i++ )
                {
                     b[i] = stackVector[i];
                }
//copiato stackVector
         int[] stackVector = new int[b.length];
//creo nuovo array stackVector
         for (int i = 0 ; i < b.length ; i++ )
/*a questo punto dovrei aver copiato
{
i valori nello stackVector raddoppiato*/
            stackVector[i] = b[i];
        }
      }
  stackVector[stackPointer] = e;
 }
/*-------Segue Metodo Main di Prova--------*/
public static void main(String[] args)
     {
          Stack pippo = new Stack();
          pippo.push(3);
          pippo.push(3);
          pippo.push(3);
          pippo.push(3);
          pippo.push(3);
          pippo.push(3);
          pippo.push(3);
          pippo.push(3);
          pippo.push(3);
          System.out.println( "Size: " + pippo.size() );
          pippo.push(4);
          System.out.println( "Size: " + pippo.size() );
          pippo.push(90);
          System.out.println( "Size: " + pippo.size() );
          System.out.println( "Top: " + pippo.top() );
          System.out.println( "Pop: " + pippo.pop() );
          System.out.println( "Size: " + pippo.size() );
     }
}
----------------------------------------------------------------------------
-------------
Il tutto compila e funziona (quasi)...ma quando vado ad aggiungere un
undicesimo elemento mi da un bel errore di "sforamento" del limite
dell'array
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
riferito alla riga di codice
stackVector[stackPointer] = e;
Se qualcuno potesse' darmi una mano gli/le sarei infinitamente riconoscente
Grazie per l'attenzione

Guarda attentamente questa parte di codice che hai scritto:
//copiato stackVector
       int[]  stackVector = new int[b.length];
//creo nuovo array stackVector
sei sicuro che ci vuole int[] avanti a stackVector?
in questo modo crei una variabile interna con lo stesso nome di quella
public e non modifichi più quest'ultima!!!
TOGLILO!

 ha scritto nel messaggio
news:alm9s4$ls0$2...@newsreader.mailgate.org...

Grazie 1000 Raffaele, ora funziona e sono contentissimo....ho capito anche
lo stupido errore, ti ringrazio sei stato davvero gentile.
Ciao