Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [java] Esercizio array

  1. #1

    [java] Esercizio array

    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
    Agos

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Direi che non stai seguendo l'approccio corretto. L'override di push() dovrebbe solamente lavorare con l'array degli oggetti. Non serve creare un ArrayStack di appoggio. Serve creare un nuovo array degli oggetti (più ampio, chiaramente), ricopiare gli elementi (ad esempio con System.arraycopy() ) ed aggiungere l'elemento.

    Questo presuppone che le variabili che tengono la capacità, il size e l'array siano accessibili anche alla sottoclasse. Questo suggerirebbe di marcarle 'protected'.

    Come al solito, invece di partire in quarta, bisognerebbe (ri)vedere bene tutto il design.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    non penso che possa fare quello che tu scrivi infatti il prof ci ha raccomandato di non usare altri metodi al di fuori di quelli implementati con ArrayStack, e tra l'altro in alcuni suggerimenti ci scrive proprio di utilizzare questo tipo di approccio. ti riporto il suggerimento che ci ha dato:

    creare la classe EspandiArrayStack che estende ArrayStack . Inserire i costruttori, invocando quelli della superclasse ArrayStack e
    implementare il metodo push. Gli altri metodi possono essere eventualmente
    implementati con l’invocazione di super().
    Testare la classe, invocando i metodi dell’interfaccia e cercando di provocare le
    eccezioni.


    Utilizzare i metodi elencati per risolvere l’esercizio

    i metodi elencati sono quelli che ho usato per ArrayStack
    Agos

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.