PDA

Visualizza la versione completa : [JAVA] Classi ricorsive


giuseppe500
14-02-2005, 10:39
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.

AlbertoPicca
14-02-2005, 11:17
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 (http://forum.html.it/forum/showthread.php?s=&threadid=665702&highlight=alberi), si tratta di un esempio di alberi in linguaggio C, ma che puoi convertire in Java.

:ciauz:

giuseppe500
15-02-2005, 11:32
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.

AlbertoPicca
15-02-2005, 12:01
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...

:ciauz:

netarrow
15-02-2005, 22:42
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ì:



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.


:ciauz:

giuseppe500
16-02-2005, 12:05
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.

giuseppe500
17-02-2005, 13:50
up

LeleFT
17-02-2005, 15:27
Credo che questa classe sia tutto ciò che ti serve:


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:


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. :ciauz:

giuseppe500
17-02-2005, 20:43
grazie mille.

giuseppe500
03-09-2005, 17:12
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

Loading