Je možné provádět kontrolu na to, co může být neinicializované proměnná?

hlasů
0

Pracuji na rekurzivní metody ...

public BinaryTree<T> TreeMirror ( BinaryTree<T> tree ) {
   BinaryTree mirror = new BinaryTree();
   mirror = clone(tree);
   ...
   TreeMirror(...)
   ...
} 

Nechci o způsobu, aby mirrorreference jiný BinaryTreeobjekt v každé rekurzivní kroku, ani opakovat mirror = clone(tree)prohlášení po první iteraci. Zajímalo by mě, jestli je možné dát do zkontrolovat, zda-prohlášení zjistit, zda instance mirrorjiž byl inicializován - v takovém případě je mirror = new BinaryTree()i mirror = clone(tree)prohlášení by se přeskočí.

Nemyslím si, že je to možné, aniž by procházely mirrorjako argument do metody nebo definovat to v definici třídy ... ale chci, aby se ujistil.

Nějakou radu je ceněn.

---------UPRAVIT-----------

Nesmím změnit podpis metody, takže nemohu předat objekt ve své realizaci. Mohu vytvořit zrcadlový stromu, ale pouze změnou původní strom do zrcadla, což je něco, co chci, aby se pokusili vyhnout. Byl jsem se snaží vytvořit nový BinaryTreeobjekt, který je zrcadlovým původního stromu, který je předán do, ale opravdu nemůže přijít na to, jak to udělat rekurzivně.

Položena 02/04/2009 v 02:45
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
2

Je to vzácné vidět veřejné rekurzivní funkce, jako je to. Lepším řešením by mohlo být, že má veřejnou metodu, která vytvoří objekt, a pak volá vlastní funkci, která je rekurzivní, že prostě dělá potřebné změny.

To je obecně těžké mít rekurzivní funkce podpis odpovídají tomu, co chcete ukázat svým klientům.

Odpovězeno 02/04/2009 v 02:51
zdroj uživatelem

hlasů
1

Zrcadlo proměnná je lokální vzhledem k metodě, a vždy bude unitialized v každé výzvě.

Předávání zrcadlo jako argument k metodě je velmi dobrá volba.

EDIT: Pokud nelze změnit podpis metody, můžete vytvořit vlastní metodu a říkáme provést rekurzi?

Odpovězeno 02/04/2009 v 02:49
zdroj uživatelem

hlasů
0

Uri odpověď je nejlepší .... refaktorovat to do soukromého metody a jednoduše inicializovat zpětné zrcátko a potom vyvolat vlastní metodou (recrsive) potkávací zrcadlo jako parametr.

Odpovězeno 02/04/2009 v 05:16
zdroj uživatelem

hlasů
0

„Nemyslím si, že je to možné, aniž by procházely zrcadlo jako argument do metody nebo definovat to v definici třídy ... ale chci, aby se ujistil.“

Správně, že by byl jeden způsob, jak dělat to, co chcete, protože zrcadlo není rekurze neměnný.

Na druhou stranu by se stát, že vaše rekurzivní algoritmus klony právě uzly, ne celé podstromy.

Odpovězeno 02/04/2009 v 02:50
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more