[Java] Metodo per un albero binario

Messaggioda Fabbiooo » 26/06/2019, 16:07

Buon pomeriggio a tutti, mi sto esercitando per sostenere un esame di programmazione a oggetti e sto svolgendo vari esercizi dei temi proposti nelle sessioni passate dal mio professore.
Uno di questi è il seguente: "Implementa un albero binario di ricerca non generico per memorizzare in modo ordinato un insieme di automobili ordinate per targa (unico campo di automobile).
Una automobile ha come campi solo la targa ed è Comparable rispetto ad essa.
L'albero deve avere i seguenti metodi:
_insert -> per inserire nell'albero un'automobile;
_print -> per stampare il contenuto dell'albero;
_countWithA -> restituisce il numero di automobili con una targa che contiene almeno una 'A'."

Ho implementato praticamente tutto (i due metodi funzionano correttamente), ma il problema è il metodo countWithA.
Avrò provato in un milione di modi diversi per farlo girare, ma niente..il risultato è sempre il famigerato NullPointerException. :?
Qualcuno sarebbe così gentile da aiutarmi? :smt023

P.s. come ulteriore specifica del testo, il mio professore non vuole che predisponiamo alcun input con l'utente, perciò gli inserimenti delle targhe (alquanto irrealistiche come si può vedere) vanno fatti in modo programmatico.
Se servono i commenti carico la versione commentata :smt023

Codice:
public class Esercizio
{
   public static void main(String[] args)
   {
      AlberoAuto AA = new AlberoAuto();

      AA.insert(new Automobile("abc"));
      AA.insert(new Automobile("lmna"));
      AA.insert(new Automobile("uvz"));
      AA.insert(new Automobile("rsta"));
      AA.insert(new Automobile("opq"));
      AA.insert(new Automobile("def"));
      AA.insert(new Automobile("ghia"));

      AA.print();
   }
}

class Automobile implements Comparable<Automobile>
{
   String targa;

   Automobile(String t)
   {
      this.targa = t;
   }

   public int compareTo(Automobile auto)
   {
      return this.targa.compareTo(auto.targa);
   }
}

class AlberoAuto
{
   class Nodo
   {
      Automobile dato;
      AlberoAuto sx;
      AlberoAuto dx;
   }

   private Nodo radice;

   public void insert(Automobile auto)
   {
      if(radice == null)
      {
         radice = new Nodo();
         radice.dato = auto;
         radice.sx = new AlberoAuto();
         radice.dx = new AlberoAuto();
      }
      else
      {
         if(radice.dato.compareTo(auto) < 0)
            radice.dx.insert(auto);
         else
            radice.sx.insert(auto);
      }
   }

   public void print()
   {
      if(radice == null)
         return;
      else
      {
         radice.sx.print();
         System.out.print(radice.dato.targa + " ");
         radice.dx.print();
      }
   }

   public void countWithA()
   {
      // ?????
   }
}
Fabbiooo
Junior Member
Junior Member
 
Messaggio: 115 di 334
Iscritto il: 12/01/2019, 19:37

Re: [Java] Metodo per un albero binario

Messaggioda giovx24 » 26/06/2019, 17:48

ciao
ovviamente la funzione deve essere ricorsiva e il corpo è simile a quello della print()
immagino che il problema stia nel passare la variabile che conta quante targhe hai trovato con la A tra le varie funzioni ricorsive, mi viene in mente che potresti appoggiarti ad una variabile statica privata dentro la classe alberoauto.

oppure dovresti aggiungere un parametro alla funzione countWithA che rappresenta quante targhe hai trovato con la A in modo che ad ogni ricorsione passi il valore attuale di questa variabile alla chiamata di funzione successiava
giovx24
Junior Member
Junior Member
 
Messaggio: 157 di 441
Iscritto il: 13/06/2018, 12:53

Re: [Java] Metodo per un albero binario

Messaggioda Fabbiooo » 27/06/2019, 09:05

Alla fine ci sono riuscito seguendo la tua logica :smt023
Grazie mille
Fabbiooo
Junior Member
Junior Member
 
Messaggio: 116 di 334
Iscritto il: 12/01/2019, 19:37


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite