«« ( Date ) »» // «« ( Thread ) »» // ir4pp1 - 2010

Domaci zadatak (pitanje za asistenta)

by Vladimir Pavlovic
četvrtak, 23. decembar 2010 - 21:13.

Poštovani,

U klasi SymbolTableBST.Obj bi se prepravkom konstruktora i metode toString()
dobilo elegantnije rešenje, a pošto prepravke nisu dozvoljene, moram da
pitam da li je sledeće urađeno namerno ili je u pitanju greška:

1.) Polje *name* klase Obj koje je tipa String se ne inicijalizuje ni u
jednom konstruktoru, pa ukoliko se to eksplicitno ne učini metoda
Obj.equals() ispaljuje NullPointerException. S obzirom na to da u klasi
TreeNode koja je superklasa klase Obj već postoji polje sa istim imenom, i
da se ono koristi kao ključ prilikom pretraživanja, mislim da je definisanje
polja *name* u klasi Obj suvišno.

2.) U metodi Obj.toString() postoji sledeći deo koda:

public String toString() {
// ....

BSTree *localTree = locals*;

// ...

for (Obj current = (Obj)BSTree.getMinimalKeyInSubtree(*localTree.root*);
current != null;
current = (Obj)BSTree.getSuccessor(current))
{
if (kind == Prog) sb.append("\n ");sb.append("[");
sb.append(current.toString());
sb.append("]");
}
//...
}

Mislim da bi ovde, pre ulaska u for petlju, trebalo proveriti da li je
localTree jednako null, da ne bi došlo do ispaljivanja izuzetka prilikom
pokušaja da se pristupi polju localTree.root, ili da se u konstruktoru polje
locals inicijalizuje praznim stablom. Ako sam dobro razumeo, polje localTree
neće biti null samo za metode i za glavni program, a u svim ostalim
slučajevima ono je null.


Unapred se zahvaljujem,

V. Pavlović