[英]In Java why is the New instance of a class not assigned to a variable
[英]HuffmanCode Java instance variable assigned a tree, remains empty
我正在編寫用於創建HuffmanCode程序的遍歷方法,由於某種原因,我在遍歷方法中構建的映射不會分配給實例變量codeMap
。 我已經在控制台中使用字符串輸出測試了方法的過程- traversal
正確地構建了tree
,但是當我分配時
`codeMap = traversal(root,s);`
在我的構造函數中,codeMap保持為空; 當我測試時返回true
`codeMap.isEmpty()`.
為什么codeMap
不接受返回的地圖? 我正在使用的root
變量freqMap
和PriorityQueue在構造函數中也可以正常工作。 這是我的構造函數/實例變量:
TreeNode root;
Map<Character,String> codeMap;
Map<Character,Double> freqMap;
HuffmanCode(Map<Character,Double> freqMap){
this.freqMap = freqMap;
PriorityQueue<TreeNode> queue = new PriorityQueue<TreeNode>(new NodeComparator());
for(Map.Entry<Character,Double> entry : freqMap.entrySet()){
TreeNode temp = new TreeNode(entry.getKey(),entry.getValue());
queue.add(temp);
}
while(queue.size() > 1){
TreeNode t1 = queue.remove();
TreeNode t2 = queue.remove();
TreeNode node = new TreeNode(t1.freq + t2.freq, t1, t2);
queue.add(node);
}
root = queue.remove();
String s = "";
codeMap = traversal(root,s);
}
和我的traversal
方法:
public Map<Character,String> traversal(TreeNode node, String s){
Map<Character,String> tree = new TreeMap<Character,String>();
if(!node.isLeaf()){
traversal(node.left,s+"0");
traversal(node.right,s+"1");
}else{
tree.put(node.letter,s);
}
return tree;
}
我在編譯或運行時沒有任何錯誤。 如果需要main
方法,請告訴我,但問題出在此構造函數上。 我已經連續工作了幾個小時,無法找到codeMap
保持空白的原因...
在traversal()
每個條目處,您都會創建一個新tree
。 返回到初始調用方法的唯一一個將始終為空,因為在該級別,該節點永遠不會是葉節點。
您必須實例化該樹一次,並將其作為參數傳遞給遞歸方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.