Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    100

    metodo di stampa a livelli

    Salve a tutti,
    dovrei realizzare un metodo di stampa per dei costrutti logici e tener traccia di cosa stra dentro il costrutto stesso. Mi spiego meglio...ad esempio quando vado a stampare i miei oggetti WHILE, vorrei che la stampa risulti col giusto allineamento, es:

    WHILE ( a )
    ---->WHILE ( b )
    -------->WHILE ( c )
    ------------>c = "false"
    -------->b = "false"
    ---->a = "false"

    in realtà non riesco perchè l'assegnamento "c = false", perdo traccia di cosa ci sia prima...non riesco a far capire a B ed A di che WHILE facciano parte.
    Il mio metodo attuale è:
    .....
    public static String barre = "";
    .....
    .....
    @Override
    public String toString() {
    String res;
    res = "WHILE ( " + expr.toString() + " )";
    for(Statement stat : getStatements()) {
    barre = barre + "----";
    res = res + "\n" + barre + ">" + stat.toString();
    }
    barre = "";
    return res;
    }
    ...a come già accennato, il risultato è sballato:
    WHILE ( a )
    ---->WHILE ( b )
    -------->WHILE ( c )
    ------------>c = "false"
    ---->b = "false"
    ---->a = "false"
    questo perchè dopo l'assegnamento di C, non trova altri statement ed esce dal ciclo... resetta "barre" e poi riprende a lanciare il toString() in modo indipendente (questo perchè non c'è legame tra gli statemente "c = false" e "b = false" ...mentre in quelli prima il legame c'è perchè si accorge che sono annidati... toString...while...toString...while...ecc... ma quando finisco i while perdo traccia)

    Avete consigli?

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    da testare

    codice:
    .....
    public static String barre = "";
    .....
    .....
    @Override
    public String toString() {
    String res;
    res = "WHILE ( " + expr.toString() + " )";
    for(Statement stat : getStatements()) {
    barre = barre + "----";
    res = res + "\n" + barre + ">" + stat.toString();
    }
    if(barre. length()>3)
    {
         barre=barre.substring(0,barre.length()-4);
    }
    else
    {
         barre="";
    }
    return res;
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    100
    guarda...stavo provando una soluzione simile alla tua... ma entrambe non vanno e non capisco perchè...

    La tua stampa:
    WHILE ( a )
    ---->WHILE ( b )
    -------->WHILE ( c )
    ------------>c = "false"
    ------------>b = "false"
    ------------>a = "false"

    ..mentra la mia che era:
    if(!barre.equals(""))
    barre = barre.substring(0,barre.length()-5);
    else barre = "";
    WHILE ( a )
    ---->WHILE ( b )
    -------->WHILE ( c )
    ------------>c = "false"
    ----------->b = "false"
    ---------->a = "false"
    (leva solo un trattino nei vari assegnamenti)

    ..se non ricordo male, mettendo -4, mi da esattamente il tuo stesso risultato...

  4. #4
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Prova
    codice:
    ....
    public static String barre = "";
    .....
    .....
    @Override
    public String toString() {
    String res;
    res = "WHILE ( " + expr.toString() + " )";
    for(Statement stat : getStatements()) {
       barre = barre + "----";
       res = res + "\n" + barre + ">" + stat.toString();
    
       if(barre. length()>3)
      {
           barre=barre.substring(0,barre.length()-4);
      }
      else
      {
           barre="";
      }
    }
    return res;
    }

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.