Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62

    [Java] Albero visita a livelli o in ampizza

    ciao, ho un piccolo problema con gli alberi volevo sapere se qualcuno di voi mi può aiutare...
    ho un composite che accetta un visitor, ora vorrei fare sempre con il visitor la visita a livelli del composite... io ho provato cosi ma c'è qualcosa che non va e non riesco a capire cosa sia:

    Codice PHP:
    public class VisitaALivelli implements Visitor{
        
    TreePanel panel;
        
    ArrayList<NodoTree>listNodo;
        
    int livelIndex;
        
    FlowLayout fwl;
        
    NodoTree root;
        
    JPanel livello;

        public 
    TreePanel visualizza(Espressione e) {
            
    livelIndex=0;
            
    listNodo=new ArrayList<NodoTree>();
            
    fwl=new FlowLayout(FlowLayout.CENTER,20,10);
            
    livello=new JPanel(fwl);
            
    panel=new TreePanel(0listNodo);
            
    e.accept(this);
            
    panel.setNodi(listNodo);
            return 
    panel;
        }
        
        
        
        
        
        
        @
    Override
        
    public void visit(Operatore o) {
            
    NodoTree temp= new NodoTree(o.toString());
            
    listNodo.add(temp);
            
    livello.add(temp);
            
    temp.setPadre(root);
            
    root=temp;
            
    panel.addLivel(livello);
            
    livello=new JPanel(fwl);
            
    o.FiglioDestro.accept(this);
             
            
    o.FiglioSinistro.accept(this);
            
        }

        @
    Override
        
    public void visit(Espressione e) {
            
    e.FiglioDestro.accept(this);
            
    e.FiglioSinistro.accept(this);
        }

        @
    Override
        
    public void visit(Variabile v) {
           
    NodoTree temp= new NodoTree(v.toString());
           
    temp.setPadre(root);
           
    listNodo.add(temp);
           
    livello.add(temp);
           
    panel.addLivel(livello);
           
        }

        @
    Override
        
    public void visit(Costante c) {
           
    NodoTree temp= new NodoTree(c.toString());
           
    temp.setPadre(root);
           
    listNodo.add(temp);
           
    livello.add(temp);
           
    panel.addLivel(livello);
           
        }
        

    praticamente ogni livello dovrebbe essere inserito in un FlowLayout ed essere aggiunto nel pannello solamente che non funziona molto bene e non riesco a capire dove sia l'errore e non mi vengono inmente altri modi per arrivare all'obbietivo visita...
    qualche idea?

  2. #2
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    allora la visita per ampizza la ho fatta in modo iterativo qui il codice solo che ho ancora problemi per quanto riguarda stamapare livello per livello

    codice:
    LinkedList<Espressione> stak=new LinkedList<Espressione>();
            //mettiamo la root nella lista
            stak.addFirst(root);
    
            ArrayList<Espressione> visita=new ArrayList<Espressione>();
            while(!stak.isEmpty()){
                Espressione espressione=stak.removeFirst();
    //    aggiungiamo o diciamo operazione sul nodo
                visita.add(espressione);
    //finita l'operazioe
                if(espressione.getFiglioDestro()!=null){
                    stak.addLast(espressione.getFiglioDestro());
                }
                if(espressione.getFiglioSinistro()!=null){
                    stak.addLast(espressione.getFiglioSinistro());
                }
                
            }
    in questo mod ottengo la visita ma non so come agire per quanto riguarda stampare a livelli
    io volevo che mi venisse una riga per lvl 1 una per il lvl 2 etc idee?

  3. #3
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    Sto facendo dei progressi ma niente di serio tornando all'utilizzo del visitor che è quello che mi ha dato maggiori risultati ho notato che mi da un errore nel solo caso che 2 figli siano tutti e 2 degli operatori come potrei risolvere?
    codice:
      @Override
        public void visit(Operatore o) {
            NodoTree nt=new NodoTree(o.toString());
            nt.setPadre(Nroot);
            listNodo.add(nt);
            Nroot=nt;
            livello.add(nt);
            if(o.getFiglioDestro() instanceof  Operatore && o.getFiglioSinistro() instanceof  Operatore){
                System.out.println(" c'è l'errore di visualizzazione");
            }
            else{
                System.out.println(" non c'è l'errore di visualizzazione");
            }
                panel.addLivel(livello);
                livello=new JPanel(fwl);
            o.FiglioDestro.accept(this);
            o.FiglioSinistro.accept(this);
            panel.addLivel(livello);
    
            
        }
    spero vivamente di ricevere aiuto mi viene molto difficile

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.