簡體   English   中英

是否可以檢查可能是未初始化的變量?

[英]Is it possible to perform checks on what may be an uninitialized variable?

我正在研究一種遞歸方法...

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

我不希望該方法在每個遞歸步驟中使mirror引用不同的 BinaryTree BinaryTree ,也不希望在第一次迭代后重復mirror = clone(tree)語句。 我想知道是否可以進行 if 語句檢查以查看mirror的實例是否已經初始化——在這種情況下mirror = new BinaryTree()mirror = clone(tree)語句將被跳過。

如果不將mirror作為參數傳遞給方法或在 class 定義中定義它,我認為這是不可能的......但我想確定一下。

非常感謝任何建議。

- - - - -編輯 - - - - - -

我不允許更改方法簽名,因此我無法在我的實現中傳遞 object。 我可以創建鏡像樹,但只能通過將原始樹修改為鏡像,這是我想盡量避免的。 我試圖創建一個新的 BinaryTree BinaryTree ,它是傳入的原始樹的鏡像,但實際上無法弄清楚如何遞歸地執行它。

很少看到像這樣的公共遞歸函數。 更好的解決方案可能是使用創建 object 的公共方法,然后調用私有 function 遞歸,只進行必要的更改。

通常很難讓遞歸 function 簽名與您想向客戶展示的內容相匹配。

鏡像變量是方法的本地變量,並且總是在每次調用中都被初始化。

將 mirror 作為參數傳遞給該方法是一個非常好的選擇。

編輯:如果你不能修改方法簽名,你可以創建一個私有方法並調用它來執行遞歸嗎?

“如果不將 mirror 作為參數傳遞給方法或在 class 定義中定義它,我認為這是不可能的……但我想確定一下。”

正確,這將是做你想做的事情的一種方法,因為鏡像不是遞歸不變量。

另一種方法是您的遞歸算法僅克隆節點,而不是整個子樹。

Uri 的答案是最好的......將其重構為私有方法並簡單地初始化鏡像,然后調用私有(recrsive)方法將鏡像作為參數傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM