一個關於樹的問題


各位朋友,我有一個關於樹的問題請教:

我想用一個文本文件中的內容來初始化一個樹型目錄,其文本文件的內容如下:

History     Library
Science     Library
America     History
China       History
Chemistry   Science
Physics     Science

我想生成的樹為:
 Library--
          ---History
                    --Armerica
                    --China
          ---Science
                    --Chemistry
                    --Physics

即以文本文件的每行的第一列為子節點,第二列為父節點,根節點為Library
我所用的方法如下(但實現不了,請各位指教):

ArrayList parent = new ArrayList();
ArrayList child = new ArrayList();
BufferedReader in = new BufferReader(new FileReader(file));//file即為文本文件。

String line = null;
StringTokenizer st;
while((line = in.readLine())!=null)
{
    if(line.trim().length() != null) //忽略空行
       {
          st  = new StringTokenizer(line);
          child.add(st.nextToken()); //第一列為子節點
          parent.add(st.nextToken());//第二列為父節點
        }
}

in.close();

HashMap parentMap = new HashMap();

//create root

DefaultMutableTreeNode root = new DefaultMutableTreeNode(parent.get(0));
DefaultTreeModel treeModel = new DefaultTreeModel(root);
parentMap.put(child.get(0),root);

DefaultMutableTreeNode node,parentNode;
for(int i = 0; i < parent.size(); i++)
{
    //首先通過HashMap的get()方法得到父節點。
    parentNode = (DefaultMutableTreeNode)parentMap.get(child.get(i));
    //取得子節點
    node = new DefaultMutableTreeNode(child.get(i));
    // 插入子節點
    treeModel.insertNodeInto(node,parentNode,parentNode.getChildCount());
    //賦HashMap的下一個值,以方便在下一循環中用get()方法取數
    parentMap.put(child.get(i+1),parent.get(i+1));
}

用上述方法,只能生成如下的一棵樹:
Library---
          --History
別的節點就不能生成了,請問這個問題是出在哪里???

10 个解决方案

#1


parentMap.get(child.get(i));的是String類型,類型不匹配.
見:parentMap.put(child.get(i+1),parent.get(i+1));

#2


那如果我把parentMap.put(child.get(i+1),parent.get(i+1));語句前加上如下語我句:

parentNode = new DefaultMutableNode(parent.get(i+1));

然后再將parentMap.put(child.get(i+1),parent.get(i+1));換成

parentMap.put(child.get(i+1),parentNode)這樣類型應該匹配了吧,但為什么還是不行呢?

#3


對不起,DefaultMutableTreeNode我寫成DefaultMutableNode了.

#4


現在行了嗎?以后記得把拋出的異常也貼出來.

#5


還是不行呀!結果和最初一樣,也沒有拋出異常呀!

#6


看:parentMap.put(child.get(i+1),parent.get(i+1));
當i=parent.size()-1;時,parent.get(i+1))會有錯! 

你的程序結構太差,看得人眼花繚亂

#7


cooled:感謝你的指教,我是一個java的初學者,有許多問題還請多多指教。至於程序結構方面,我會慢慢的加以改變。

對於這個問題,的確當i=parent.size()-1;時,parent.get(i+1)會出錯,但我想之所以不會生成正確的結果,問題不是出在這一點上,因為即使我暫時不取i=parent.size()-1這個數,即將i<parent.size()改為i<parent.size()-1。也不會得到正確的結果。

能不能請cooled兄再幫小弟指點一下。

#8


你的思路本來就存在問題:
給我信箱,一會給你個例子

#9


謝謝gefy,我的信箱是:dengcq@dlwewin.com

#10


// 插入子節點
    treeModel.insertNodeInto(node,parentNode,parentNode.getChildCount());
這句話好像有問題,你試一下這個
treeModel.insertNodeInto(node,parentNode,i+1);

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com