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?
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
- 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()
{
// ?????
}
}