|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2004
Città: Ascoli Piceno
Messaggi: 742
|
[JAVA] Newbie e rappresentazione alberi
Ho un'espressione logica del tipo "a AND b OR c" e devo rappresentarla come un albero del tipo:
Codice:
OR / \ AND c / \ a b
__________________
Toshiba Satellite A500-14F : Intel® Core™2 Duo P8700; ATI Mobility Radeon™ HD 4650; TruBrite® HD TFT High Brightness display 16.0"; 4,096 MB DDR2 RAM; HD 320 GB; Wi-Fi+BT 802.11a/g/Draft-N; Built-in Harman Kardon® stereo speakers; Touch Pad with Multi-Touch Control; TV Tuner ibrido digitale (DVB-T) e analogico; DVD Super Multi drive; Windows 7 Professional |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Suddividi l'espressione strighe separate da spazio, riconosci cosa rappresentano le varie stringhe (operatore o variabile) e costruisci l'albero.
Che precedenza hai fra gli operatori ? Se non hai la precedenza allora è molto più facile in quanto la precedenza è quella di lettura. Imho ti conviene crearti una interfaccia Elemento. Operatore e Variabile implementano elemento. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2004
Città: Ascoli Piceno
Messaggi: 742
|
Scusa il ritardo del reply.
Attualmente la situazione è la seguente: ho un vettore in cui ci sono gli elementi dell'espressione messi in ordine, quindi la precedenza degli operatori l'ho già stabilita, ora devo solo metterli su di un albero ma non riesco proprio... La struttura è come te l'ho disegnata sopra ovvero se ho una cosa del tipo: "a AND b OR c OR d" ...l'albero dovrà essere... Codice:
OR / \ OR d / \ AND c / \ a b
__________________
Toshiba Satellite A500-14F : Intel® Core™2 Duo P8700; ATI Mobility Radeon™ HD 4650; TruBrite® HD TFT High Brightness display 16.0"; 4,096 MB DDR2 RAM; HD 320 GB; Wi-Fi+BT 802.11a/g/Draft-N; Built-in Harman Kardon® stereo speakers; Touch Pad with Multi-Touch Control; TV Tuner ibrido digitale (DVB-T) e analogico; DVD Super Multi drive; Windows 7 Professional |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Come dicevo parti dalla suddivisione dell'espressione in sotto stringhe da inserire in una lista. A quel punto basta visitare in ordine le stringhe per costruire l'albero.
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2004
Città: Ascoli Piceno
Messaggi: 742
|
A livello teorico ci sono... il problema è proprio il codice... quanto sono niubbo
__________________
Toshiba Satellite A500-14F : Intel® Core™2 Duo P8700; ATI Mobility Radeon™ HD 4650; TruBrite® HD TFT High Brightness display 16.0"; 4,096 MB DDR2 RAM; HD 320 GB; Wi-Fi+BT 802.11a/g/Draft-N; Built-in Harman Kardon® stereo speakers; Touch Pad with Multi-Touch Control; TV Tuner ibrido digitale (DVB-T) e analogico; DVD Super Multi drive; Windows 7 Professional |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2004
Città: Ascoli Piceno
Messaggi: 742
|
Codice:
package unicam.aaftx.operators; import java.util.Vector; /*Classe Node*/ public class Node { Node left; Node right; Object data; public Node CreateNode(Node dx, Node sx, Object newData) { right = dx; left = sx; data = newData; return this; } public void CreateRoot(int i, Vector<Object> complexAssist) { Node root = CreateNode (null, null, complexAssist.get(i)); CreateTree(i, complexAssist, root); } public void CreateTree(int i, Vector<Object> complexAssist, Node root) { ComplexSelectionCondition csc; this.right = new Node(); this.right.CreateNode(null, null, complexAssist.get(i + 1)); if (i - 2 < 0) { this.left = new Node(); this.left.CreateNode(null, null, complexAssist.get(i - 1)); csc = new ComplexSelectionCondition(root); } else { i = i - 2; this.left = new Node(); this.left.CreateNode(null, null, complexAssist.get(i)); this.left.CreateTree(i, complexAssist, root); } } } OK così funziona!!! Ora il problema è considerare le parentesi... Un'espressione del tipo: a AND (b OR c) AND (d AND e) ci manda assolutamente in crisi... ![]()
__________________
Toshiba Satellite A500-14F : Intel® Core™2 Duo P8700; ATI Mobility Radeon™ HD 4650; TruBrite® HD TFT High Brightness display 16.0"; 4,096 MB DDR2 RAM; HD 320 GB; Wi-Fi+BT 802.11a/g/Draft-N; Built-in Harman Kardon® stereo speakers; Touch Pad with Multi-Touch Control; TV Tuner ibrido digitale (DVB-T) e analogico; DVD Super Multi drive; Windows 7 Professional Ultima modifica di f0/\/2!3 : 14-12-2007 alle 10:42. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:51.