Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Primo esercizio sulle pile

    Ho un problema con un esercizio in Java.

    Questo è il testo.

    Scrivere un metodo statico che riceve una pila di oggetti e ne inverte l'ordine.
    Il metodo non deve usare array o altre strutture dati, ma soltanto pile.
    Si noti che il metodo non deve restituire una nuova pila, ma deve modificare il contenuto della pila ricevuta come parametro esplicito.

    Per collaudare il corretto funzionamento del metodo, scrivere un programma che

    * legge dallo standard input un insieme (di dimensione non predeterminata) di numeri interi, in formato libero (cioè anche più numeri su una stessa riga, separati da spazi), inserendoli in una pila
    * invoca il metodo appena progettato
    * visualizza sullo standard output i numeri dell'insieme, uno per riga, estraendoli dalla pila

    La realizzazione più semplice prevede l'utilizzo di due pile come spazio di memorizzazione temporaneo.

    Queste sono le classi fornite.

    public interface Container
    { boolean isEmpty();
    int size();
    }

    public interface Stack extends Container
    { void push(Object obj);
    Object pop();
    Object top();
    }

    public class ArrayStack implements Stack
    { protected Object[] v;
    protected int vSize;
    public ArrayStack()
    { v = new Object[100];
    vSize = 0;
    }
    public int size()
    { return vSize;
    }
    public boolean isEmpty()
    { return (vSize == 0);
    }
    public void push(Object obj)
    { if (vSize == v.length)
    v = resize(v, 2*vSize);
    v[vSize++] = obj;
    }
    public Object top()
    { if (isEmpty())
    throw new EmptyStackException();
    return v[vSize - 1];
    }
    public Object pop()
    { Object obj = top();
    v[--vSize] = null;
    return obj;
    }
    private Object[] resize(Object[] oldArray, int newLength)
    { Object[] newArray = new Object[newLength];
    System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
    return newArray;
    }
    }

    Queste invece sono quelle che ho progettato io.

    public class ReverseStackUsingTwoStacks
    {
    public static void reverse(ArrayStack objStack)
    {
    ArrayStack temp=new ArrayStack();
    ArrayStack temp2=new ArrayStack();
    while(!objStack.isEmpty())
    {
    temp.push(objStack.pop());
    }
    while(!temp.isEmpty())
    {
    temp2.push(temp.pop());
    }
    while(!temp2.isEmpty())
    {
    objStack.push(temp2.pop());
    }
    }
    }




    import java.util.Scanner;

    public class ReverseStackUsingTwoStacksTester
    {
    public static void main(String[] args)
    {
    Scanner console=new Scanner(System.in);
    ArrayStack a=new ArrayStack();
    System.out.println("Inserisci una pila di numeri interi:");
    while(console.hasNextInt())
    {
    a.push(new Integer(console.nextInt()));
    }
    ReverseStackUsingTwoStacks.reverse(a);
    while(!a.isEmpty())
    {
    System.out.println((Integer) a.pop());
    }
    }
    }



    L'output che ricevo è uguale all'input, come se non invertisse l'ordine dei dati.

    Mettendo però, qualche riga di codice per visualizzare l'output in ReverseStackUsingTwoStacks ottengo il risultato desiderato

    Spero non sia troppo confuso e che possiate aiutarmi.

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537

    Re: Primo esercizio sulle pile

    Originariamente inviato da Aegidius157
    codice:
    import java.util.Scanner;
    
    public class ReverseStackUsingTwoStacksTester
    {
    	public static void main(String[] args)
    	{
    		Scanner console=new Scanner(System.in);
    		ArrayStack a=new ArrayStack();
    		System.out.println("Inserisci una pila di numeri interi:");
    		while(console.hasNextInt())
    		{
    			a.push(new Integer(console.nextInt()));
    		}
    		ReverseStackUsingTwoStacks.reverse(a);
    		while(!a.isEmpty())
    		{
    			System.out.println((Integer) a.pop());
    		}
    	}
    }

    L'output che ricevo è uguale all'input, come se non invertisse l'ordine dei dati.

    Mettendo però, qualche riga di codice per visualizzare l'output in ReverseStackUsingTwoStacks ottengo il risultato desiderato

    Spero non sia troppo confuso e che possiate aiutarmi.
    Buongiorno
    Punto primo, per cortesia i tag [ code][/code].
    Punto secondo.
    Alla chiamata della funzione tu modifiche l'oggetto localmente alla funzione chiamanta, mentre al momento della stampa tu non hai effettuato nessuna modifica alla variabile che stampi ( miiii ce schifo di frase... )
    In poche parole fai in questo modo:
    codice:
    a = ReverseStackUsingTwoStacks.reverse(a);
    Ricordando di far tornare alla funzione ReverseStackUsingTwoStack.reverse l'oggetto e non void. In questo modo ottieni quello che desideri. ( Ricorda la modifica locale a funzione, purtroppo manca il riferimento a indirizzo di memoria come in c....però ci sono gli oggetti ).

    Chiaro?
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

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.