Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    4

    Creazione Manuale Array Dinamici - Aggiunta oggetto in fondo alla lista

    Salve a tutti.
    Ho estremo bisogno di un aiuto per creare una sorta di array dinamioi in modo manuale.
    Sostanzialmente sto parlando di un oggetto contenente una variabile intera ed un oggetto uguale a se stesso:
    codice:
    private int val;
        private Oggetto o;
        public Oggetto(){
            val=Integer.parseInt(JOptionPane.showInputDialog("Inserire un numero"));
            o=null;
        }
    Bene.
    Il mio problema sta nell'inserire un nuovo oggetto che creo (sempre di quel tipo) in fondo ad una lista. Per lista intendo che all'interno dell'oggetto vuoto o del primo oggetto devo inserire un altro oggetto o contenente un altra variabile intera ed un ennesimo oggetto o null, all'interno del quale dovrei inserire un'altro oggetto dello stesso tipo ecc.. continuando se posso all'infinito.
    Vi posto le due classi così penso di essere più chiaro per il concetto seguente:
    codice:
    public class Oggetto{
        private int val;
        private Oggetto o;
        public Oggetto(){
            val=Integer.parseInt(JOptionPane.showInputDialog("Inserire un numero"));
            o=null;
        }
        public void setProssimo(Oggetto p){
            o=p;
        }
        public int getVal(){
            return val;
        }
        public Oggetto getO(){
            return o;
        }
    }
    codice:
    public class Array{
        private Oggetto a;
        public Array(){
            a=null;
        }
        public void aggiungiInTesta(Oggetto t){
            if(a != null){
                t.setProssimo(a);
            }
            a=t;
        }
        public void visualizza(){
            Oggetto h=a;
            boolean b;
            do{
                b=true;
                System.out.println(h.getVal());
                h=h.getO();
                if(h==null){
                    b=false;
                }
            }
            while(b==true);
        }
        public void aggiungiInCoda(Oggetto d){
           ?????????????
        }
    }
    Fatto ciò, per inserire all'ultimo posto il nuovo oggetto avevo pensato ad un comando simile a questo che nella mia fantasia funziona:
    codice:
    a.while(a.getO()!=null){
             getO()
       }.setProssimo(d);
    Riassunto in parole povere, mi dovrebbe continuare ad eseguire getO().getO().getO()..... fino a quando non trova un oggetto null ed in questo momento copiarmi in questo il contenuto di quello che ho creato.

    E' un ragionamento estremamente contorto ai livelli del film INCEPTION a mio parere.
    Se qualcuno riesce a venirne fuori lo ringrazierò a vita.
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Non esiste nulla del genere in Java, while è la parola chiave che identifica l'omonimo costrutto per il controllo di flusso, dovresti visualizzare diversi errori in fase compilazione; i cicli non sono metodi, non ritornano nulla.

    Prova una cosa del genere:

    codice:
    Oggetto tmp = a;
    
    while (tmp.getO() != null)
    tmp = tmp.getO();
    
    tmp.setProssimo(d);

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    4
    Originariamente inviato da Kaamos
    Non esiste nulla del genere in Java, while è la parola chiave che identifica l'omonimo costrutto per il controllo di flusso, dovresti visualizzare diversi errori in fase compilazione; i cicli non sono metodi, non ritornano nulla.

    Prova una cosa del genere:

    codice:
    Oggetto tmp = a;
    
    while (tmp.getO() != null)
    tmp = tmp.getO();
    
    tmp.setProssimo(d);
    Ero a conoscenza del fatto che la mia soluzione non poteva esistere, infatti ho specificato che funzionava solo nella mia fantasia.
    In ogni caso quello che hai scritto non è quello che serve a me in quanto facendo così creo un secondo oggetto nel quale inserisco l'oggetto d. Quello che a me serviva è inserire l'oggetto d nell' "Array" a e poi in seguito visualizzare tutti gli elementi che compongono quest'ultimo tramite il metodo visualizza().
    Spero di essermi spiegato meglio

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Cavaz94
    Ero a conoscenza del fatto che la mia soluzione non poteva esistere, infatti ho specificato che funzionava solo nella mia fantasia.
    In ogni caso quello che hai scritto non è quello che serve a me in quanto facendo così creo un secondo oggetto nel quale inserisco l'oggetto d. Quello che a me serviva è inserire l'oggetto d nell' "Array" a e poi in seguito visualizzare tutti gli elementi che compongono quest'ultimo tramite il metodo visualizza().
    Spero di essermi spiegato meglio
    Il codice che ho scritto non istanzia nuovi oggetti della classe Oggetto, non ho usato l'operatore new.
    L'oggetto della classe Oggetto che dichiaro serve solo alla funzione per scorrere la lista senza modificare il primo elemento, dopodiché viene cancellato al termine della funzione, ma allla fine del while la variabile temp si riferisce all'ultimo elemento della lista.

    Ho appena creato un main di prova e mi sembra che faccia esattamente quello che desideri, prova, forse sono io particolarmente ottuso stasera

    codice:
    class ListTest {
    	
    	public static void main(String[] args) {
    		Oggetto a, b, c;
    		Array list;
    		
    		a = new Oggetto();
    		b = new Oggetto();
    		c = new Oggetto();
    		
    		list = new Array();
    		
    		list.aggiungiInTesta(a);
    		list.aggiungiInCoda(b);
    		list.aggiungiInCoda(c);
    		
    		list.visualizza();
    	}
    	
    }

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Creazione Manuale Array Dinamici - Aggiunta oggetto in fondo alla lista

    Originariamente inviato da Cavaz94
    codice:
    public class Oggetto{
        private int val;
        private Oggetto o;
        public Oggetto(){
            val=Integer.parseInt(JOptionPane.showInputDialog("Inserire un numero"));
            o=null;
        }
        public void setProssimo(Oggetto p){
            o=p;
        }
        public int getVal(){
            return val;
        }
        public Oggetto getO(){
            return o;
        }
    }
    Tecnicamente corretto. A parte il fatto che non è molto bello chiedere l'input del numero con un JOptionPane messo lì dentro nel costruttore di questa classe che comunque modella solo un "nodo con valore" e non ha nulla a che fare (concettualmente) con un interfacciamento verso l'utente.

    Ma tralasciamo pure questo dettaglio, se è un "esercizio" o poco più, si può chiudere un occhio.

    Originariamente inviato da Cavaz94
    codice:
        public void aggiungiInTesta(Oggetto t){
            if(a != null){
                t.setProssimo(a);
            }
            a=t;
        }
    Se ci ragioni, quel if è del tutto inutile.

    Originariamente inviato da Cavaz94
    codice:
        public void visualizza(){
            Oggetto h=a;
            boolean b;
            do{
                b=true;
                System.out.println(h.getVal());
                h=h.getO();
                if(h==null){
                    b=false;
                }
            }
            while(b==true);
        }
    Qui c'è altra roba inutile. Quel boolean non serve. Il ciclo basterebbe che sia: "finché h è diverso da null", allora: stampa valore e metti in h il prossimo.
    Stop.

    Originariamente inviato da Cavaz94
    codice:
        public void aggiungiInCoda(Oggetto d){
           ?????????????
        }
    }
    Con una logica di ciclo similare a visualizza (quanto ho detto io) si può fare il aggiungiInCoda.
    Basta arrivare ad avere l'ultimo oggetto, dopodiché il nuovo 'd' diventa il prossimo 'o' nell'ultimo nodo che esisteva.

    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    4
    Originariamente inviato da Kaamos
    Il codice che ho scritto non istanzia nuovi oggetti della classe Oggetto, non ho usato l'operatore new.
    L'oggetto della classe Oggetto che dichiaro serve solo alla funzione per scorrere la lista senza modificare il primo elemento, dopodiché viene cancellato al termine della funzione, ma allla fine del while la variabile temp si riferisce all'ultimo elemento della lista.

    Ho appena creato un main di prova e mi sembra che faccia esattamente quello che desideri, prova, forse sono io particolarmente ottuso stasera

    codice:
    class ListTest {
    	
    	public static void main(String[] args) {
    		Oggetto a, b, c;
    		Array list;
    		
    		a = new Oggetto();
    		b = new Oggetto();
    		c = new Oggetto();
    		
    		list = new Array();
    		
    		list.aggiungiInTesta(a);
    		list.aggiungiInCoda(b);
    		list.aggiungiInCoda(c);
    		
    		list.visualizza();
    	}
    	
    }
    Non ero a conoscenza che senza l'operatore new la variabile tmp (in questo caso) non creasse una variabile per conto proprio
    Grazie Infinite!
    Mi hai illuminato la nottata.
    Buona notte e ancora grazie dell'aiuto!

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    4

    Re: Re: Creazione Manuale Array Dinamici - Aggiunta oggetto in fondo alla lista


    Qui c'è altra roba inutile. Quel boolean non serve. Il ciclo basterebbe che sia: "finché h è diverso da null", allora: stampa valore e metti in h il prossimo.
    Stop.
    Avevo chiesto aiuto in un'altra parte dell'esercizio, non nello snellimento del programma.

    Con una logica di ciclo similare a visualizza (quanto ho detto io) si può fare il aggiungiInCoda.
    Basta 1) arrivare ad avere l'ultimo oggetto, dopodiché il nuovo 'd' diventa il prossimo 'o' nell'ultimo nodo che esisteva.

    Tutto qui.
    1) Era proprio questo il punto. Non sapevo come fare.
    2) Risolto il tutto grazie all'utente precedente a te.
    3) Sono un ragazzo di quarta superiore per perito informatico. La velocità di esecuzione e lo snellimento del programma ora come ora non mi interessa, ma grazie comunque delle dritte...

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.