Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [java]classi ricorsive

    Salve a tutti.
    Premetto che ho cercato sul forum e su google,non son stato con le mani in mano ma non ho trovato molto.
    Dalle ricerche mi sembra di aver capito che le classi ricorsive servono per implementare alberi , binari e non .
    Io dovrei implementare una struttura gerarchica padre fratello figli per una jtree(ma anche solo per capire).
    Mi sapete dare una mano?codice,linck ecc...
    Grazie.

  2. #2

    Re: [java]classi ricorsive

    Originariamente inviato da giuseppe500
    Salve a tutti.
    Premetto che ho cercato sul forum e su google,non son stato con le mani in mano ma non ho trovato molto.
    ... ma ti sei dimenticato di fare una ricerca all'interno di questo forum.
    Prova a vedere questo topic, si tratta di un esempio di alberi in linguaggio C, ma che puoi convertire in Java.


  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie per l'interessamento Alberto , ma non avendo basi sui puntatori,non riesco a capire gli alberi.
    I puntatori so cosa fanno ma non capisco come si "traducano" in java ossia : il puntatore al nodo successivo è una instanza di una variabile contenuta nella classe? o cosa.
    E' un errore di semantica,ho capito il listato ma non riesco a tradurlo per il motivo qui sopra.
    Grazie.

  4. #4
    Potresti semplicemente pensare alla struttura di un albero, ovvero come quell'elemento costituito da due parti essenziali:
    . i rami
    . le foglie

    Pensa alle foglie come l'astrazione di una figura umana e ai rami come il collegamento o parentela tra queste figure.

    Ogni figura contiene delle informazioni ben precise:
    . Nome (riferito alla persona)
    . Data di nascita (riferito alla persona)
    . E' figlio di... (riferito alla parentela)

    Come potrai ben capire la scrittura E' figlio di... implica un collegamento ad un'altra figura astratta che é stata definita in precedenza.

    Ora, traducendo quanto sopra descritto, in un linguaggio più tecnico possiamo dire che l'area di memoria definita come E' figlio di... contiene il puntatore alla area di memoria occupata dalla figura del padre.

    Parlando di Java, puoi creare una classe con dei metodi e delle proprietà elementari che identificano ogni "foglia" dell'albero che ti ho descritto in alto.

    Così, ogni padre e ogni figlio saranno istanze di questa classe principale.

    Spero di aver indicato in modo chiaro i concetti...


  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da giuseppe500
    I puntatori so cosa fanno ma non capisco come si "traducano" in java Grazie.
    Quando vedi un puntatore in C++(quindi Object* o) in Java basterà scrivere Object o, dato che gli oggetti java sono solo puntatori ma espliciti, quindi automaticamente dereferenziati o non dereferenziati a seconda dell'utilizzo.

    in C++ puoi anche fare così:

    codice:
    Object o(costruttore);//se è per valore, in Java non esiste
    
    Object* o = new Object(costruttore);//se è un puntatore
    //In java Object o = new Object(); senza *
    Come vedi in Java new si usa sempre perchè gli oggetti sono sempre riferimenti.
    Spero che ti possa essere utile per capire il thread postato da Alberto.


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie ragazzi siete fantastici!!! ho finalmente capito.
    ho implementato il mio albero in questo modo:

    class FileNode {

    public FileNode fdx ;
    public FileNode aggiungi (FileNode n ) { // inserimento nodi
    if ( this.fdx ==null ) { // Caso base

    fdx =new FileNode ( n ) ;
    mPadre=fdx;
    }
    else {
    if ( this.fdx !=null ) fdx.aggiungi ( n ) ; // chiamata ricorsiva
    else if ( this.fdx ==null ) fdx =new FileNode (n ) ;
    else fdx =new FileNode ( n,str ) ;
    }
    return fdx;
    } /
    In questo modo creo una struttura gerarchica padre/figlio
    Vorrei fare in modo di implementare i fratelli e accedere alla funzione aggiungi dall'esterno come se fosse un "vettore" ossia:

    FileNode f=new FileNode("root");
    FileNode fratello1=new FileNode("fratello1");
    FileNode fratello2=new FileNode("fratello2");
    FileNode figlioFratello1=new FileNode("figlio1");

    f.aggiungi(fratello1).aggiungi(figlioFratello1);//primo figlio
    f.aggiungi(fratello2);

    in questo modo implementare una struttura tipo jtree
    Grazie.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    up

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Credo che questa classe sia tutto ciò che ti serve:
    codice:
    public class FileNode {
       private String nome;
       private Vector figli;
    
       public FileNode(String nome) {
          this.nome = nome;
          figli = new Vector();      
       }
    
       public FileNodo(String nome, FileNode figlio) {
          this.nome = nome;
          figli = new Vector();
          figli.add( figlio );
       }
    
       public String getNome() { return nome; }
    
       public void aggiungi(FileNode figlio) {
          figli.add( figlio );
       }
    
       public FileNode getFiglio(String nome) {
          return trova(nome);
       }
    
       private FileNode trova(String nome) {
          boolean trovato = false;
          FileNode f = null;
          int i = 0;
          while ((i < figli.size()) && !trovato) {
             if (((FileNode) figli.elementAt(i)).getNome().equals(nome)) {
                trovato = true;
                f = (FileNode) figli.elementAt(i);
             }
          }
          return f;
       }
    }
    In questo modo, per generare la gerarchia che hai dato tu come esempio, puoi usare queste istruzioni:
    codice:
    FileNode f=new FileNode("root"); 
    FileNode fratello1=new FileNode("fratello1"); 
    FileNode fratello2=new FileNode("fratello2"); 
    FileNode figlioFratello1=new FileNode("figlio1"); 
    
    f.aggiungi(fratello1);
    f.getFiglio("fratello1").aggiungi(figlioFratello1);//primo figlio 
    f.aggiungi(fratello2);
    In questo modo puoi aggiungere quanti fratelli vuoi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie mille.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    conoscete una qualche libreria,per gestire gli alberi con codice sorgente?
    Voglio imparare a gestire i livelli,a scorrere l'albero ecc.. insomma tutte le possibili funzioni di utilità con gli alberi e vedere come funzionano!
    grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.