一个关于树的问题


各位朋友,我有一个关于树的问题请教:

我想用一个文本文件中的内容来初始化一个树型目录,其文本文件的内容如下:

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);

注意!

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



 
  © 2014-2022 ITdaan.com