Albero in Java--

di il
6 risposte

Albero in Java--

Ciao, volevo mostrarvi questo codice che non riesco a capire. Spero che possiate spiegarmelo nella maniera più chiara possibile, visto che sono molto inesperto. Fin ora all'università abbiamo fatto le basi di java ovvero: le istruzioni if, do while, do, while for.. array, variabili..questo è un codice che funziona su java--, però penso che si capisca comunque.
Per n uguale 4 (righe) per esempio il codice stampa un albero di questo tipo
http://oi61.tinypic.com/1tmqm1.jp
int n;
do {n=Input.getInt("Inserisci un numero di rami:");
} while (n<=0);

for (int i=1; i<=n; i++) {
	for (int j=1; j<=n-i; j++) {
		System.out.print(" "); 
	}
	for (int j=1; j<=((2*i)-1); j++){
		if (i>n||j==1||j==((2*i)-1)){
			System.out.print("+");
			}
			else {System.out.print("-");}
		}
	for (int j=1; j<=(n-1); j++){
		System.out.print(" ");
	}
	System.out.println();
	}
	

6 Risposte

  • Re: Albero in Java--

    Secondo me continua a chiederti il numero di rami fino a quando non inserisci 0, e a quel punto non fa nulla... sei sicuro che funzioni?
  • Re: Albero in Java--

    Rados ha scritto:


    Ciao, volevo mostrarvi questo codice che non riesco a capire.
    Il codice risulta abbastanza fumoso. L'ultimo for poi è inutile poiché stampa spazi finali che non sono significativi per il risultato finale dell'albero.
    Il for centrale è quello che appunto rende un po' fumoso il tutto. Si può riscrivere almeno 3 volte meglio e più leggibile.
  • Re: Albero in Java--

    Come si potrebbe scrivere secondo voi? Usando costruzioni semplici ovviamente
    No, l'inizio del codice significa praticamente che l'utente deve inserire un numero maggiore di 0 per fare in modo che l'albero abbia un numero di righe. Se provo a inserire -4 per esempio mi richiede di inserire un numero maggiore di 0
  • Re: Albero in Java--

    Rados ha scritto:


    Come si potrebbe scrivere secondo voi? Usando costruzioni semplici ovviamente
    No, l'inizio del codice significa praticamente che l'utente deve inserire un numero maggiore di 0 per fare in modo che l'albero abbia un numero di righe. Se provo a inserire -4 per esempio mi richiede di inserire un numero maggiore di 0
    Io ho appena scritto questo:
    int n = .......  // input di n, non importa come
    
    for (int r = 0; r < n; r++) {
        for (int s = n-r; s > 1; s--) {
            System.out.print(" ");
        }
    
        System.out.print("+");
    
        for (int t = r*2-1; t > 0; t--) {
            System.out.print("-");
        }
    
        if (r > 0) {
            System.out.print("+");
        }
    
        System.out.println();
    }
    Così è estremamente più pulito e chiaro. Provate a dirmi che non è chiaro e facilmente comprensibile quanti '-' vengono stampati per una riga r.
    Ed è pure facilmente comprensibile che ci sono sempre due '+' nella riga a parte il caso particolare della prima riga r=0 dove ce n'è solo uno.

    Provate invece a dedurre queste cose dal for centrale nel codice postato da Rados .....
  • Re: Albero in Java--

    Potresti "tradurmi" in italiano i 3 for e l'if? Cioè nel pratico cosa vado a fare? Come se dovessi dirmi cosa costruiscono
    E' molto più pulito come codice comunque grazie
    PS: ah l'ho provato e funziona!!
  • Re: Albero in Java--

    Ciao, provo a spiegartelo io, anche se il codice non è il mio.
    Il "for" più esterno serve per ripetere le seguenti operazioni per ogni riga (infatti il ciclo viene eseguito esattamente "n" volte).
    Il primo "for" interno serve per contare e stampare gli spazi. Ovvero esplicita la relazione che esiste fra il numero di spazi, il numero totale di righe e la riga corrente: in particolare si ha che il numero di spazi è dato da (righe totali - riga corrente - 1).
    Il secondo ciclo interno stampa la sequenza di "-"; anche qua si è individuata la relazione: (numero di "-" = riga corrente*2 - 1).
    Infine l'if serve solamente perché la prima riga rappresenta un caso particolare (è l'unica ad avere un solo carattere "+", mentre le altre ne hanno tutte 2). Di conseguenza se si omettesse questa condizione si avrebbe un albero del tipo:
    
         ++
        +-+
       +---+
      +-----+
    
Devi accedere o registrarti per scrivere nel forum
6 risposte