递归java将列表重新斜体化为空

递归java将列表重新斜体化为空,java,recursion,tree,Java,Recursion,Tree,我正在查询一棵树,查找数据字符串为“directory”的节点,然后在列表中报告其子节点的数据 在我的方法开始时,我已经像这样初始化了我的列表。 List-listofdirectories=new-ArrayList() 在调试过程中,java会递归地遍历树并将字符串添加到列表中,但一旦它再次调用自己,listofdirectories变量在递归过程中再次变为空。但是,在最后,它会列出根目录及其目录子目录的列表 我的方法不接受任何参数。在pastebin上发布代码,有很多System.Out供

我正在查询一棵树,查找数据字符串为“directory”的节点,然后在列表中报告其子节点的数据

在我的方法开始时,我已经像这样初始化了我的列表。 List-listofdirectories=new-ArrayList()

在调试过程中,java会递归地遍历树并将字符串添加到列表中,但一旦它再次调用自己,listofdirectories变量在递归过程中再次变为空。但是,在最后,它会列出根目录及其目录子目录的列表

我的方法不接受任何参数。在pastebin上发布代码,有很多System.Out供我调试

我的方法代码+控制台+示例树发布在此处:

public List getDirectories()//WORKS b/c没有添加第一个目录
{
List-listofdirectories=new-ArrayList();
System.out.println(“在方法开始时”+目录列表);
//int-sizeofchildrennodes=this.children.size();
if(this.data.equals(“目录”))
{
System.out.println(“FFFFFFFFFFFFFFF”);
}
if(this.data.equals((“目录”))
{
添加(this.children.get(0.children.get(0.data));
for(int i=0;i0)
{
thenode.getDirectory();
}
}
}
//if(this.children.get(i).children.contains(i))
}
System.out.println(“!!!beforeoutput”+目录列表);
返回董事名单;
}
//////////////////////////////////
///这是控制台的日志
////////////////////////////////////
在方法开始时[]
FFFFFFFFFFFFF
当前节点为:name
目前的数据是:电影和图片
1[电影和图片]
当前节点是:目录
当前节点数据为:name
1[电影和图片]
@@[电影和图片]
在方法开始时[]
FFFFFFFFFFFFF
当前节点为:name
目前的数据是:电影
1[电影]
当前节点为:文件
当前节点数据为:name
1[电影]
当前节点为:文件
当前节点数据为:name
1[电影]
当前节点为:文件
当前节点数据为:name
1[电影]
!!!输出前[电影]
当前节点是:目录
当前节点数据为:name
1[电影和图片,电影]
@@[电影和图片,电影]
在方法开始时[]
FFFFFFFFFFFFF
当前节点为:name
当前节点数据为:图片
1[图片]
当前节点为:文件
当前节点数据为:name
1[图片]
当前节点为:文件
当前节点数据为:name
1[图片]
当前节点为:文件
当前节点数据为:name
1[图片]
当前节点为:directory2.0
当前节点数据为:name
我找到了direct2.0
direct2.0的名称是Pictures2.0
0[图片]
0.5[图片,图片2.0]
1[图片,图片2.0]
!!!输出前[图片,图片2.0]
!!!输出前[电影和图片,电影,图片]
2[电影和图片,电影,图片]//这是输出
//我希望这包括图片2.0
///////////////////////
////树的例子
//////////////////////
|--目录
|--名字
|--电影和图片
|--目录
|--名字
|--电影
|--文件
|--名字
|--哈利波特
|--日期
|-- 20130602
|--大小
|-- 1400123
|--文件
|--名字
|--躲避球
|--日期
|-- 11111111
|--大小
|-- 5000000
|--文件
|--名字
|--黑暗骑士
|--日期
|-- 55555555
|--大小
|-- 7657657
|--目录
|--名字
|--照片
|--文件
|--名字
|--Mountain.png
|--日期
|-- 20000000
|--大小
|-- 190000
|--文件
|--名字
|--Flower.jpg
|--日期
|-- 140000
|--大小
|-- 7657657
|--文件
|--名字
|--野生动物.jpeg
|--日期
|-- 90000000
|--大小
|-- 250000
|--目录2.0
|--名字
|--图片2.0

解决了的 示例树查询的解决方案如下:

List listofdi
public List<String> getDirectories() // WORKS b/c didnt add first directory
        {
                List<String> listofdirectories = new ArrayList<>();
                System.out.println("AT THE START OF THE METHOD " +listofdirectories);
               // int sizeofchildrennodes = this.children.size();
               
                if(this.data.equals("directory"))
                {
                    System.out.println("FFFFFFFFFFFFFFF");
                }
               
                if(this.data.equals(("directory")))
                {
                    listofdirectories.add(this.children.get(0).children.get(0).data);
                   
                for (int i = 0; i < this.children.size(); i++) { // Checks the directories in the CURRENT directory
               
                    String nodename = this.children.get(i).data;              
                    FileSystemNode thenode = this.children.get(i);
                   
                    System.out.println("Current node is: " + nodename);
                    System.out.println("Current nodedata is: " + thenode.children.get(0).data);
                   
                  if(nodename.equals("directory2.0"))
                {
                    System.out.println("I found direct2.0");
                    System.out.println("name of direct2.0 is " + thenode.children.get(0).children.get(0).data);
                    System.out.println("0" + listofdirectories);
                    listofdirectories.add(thenode.children.get(0).children.get(0).data);
                    System.out.println("0).5" +listofdirectories);
                }
                 
                    System.out.println("1" +listofdirectories);
                   
                if(nodename.equals("directory"))
                {
                    System.out.println("@@" + listofdirectories);
                    listofdirectories.add(thenode.children.get(0).children.get(0).data);
                    if(thenode.children.size()> 0)
                    {
                        thenode.getDirectories();
                    }
                   
                }
               
                }
//                if(this.children.get(i).children.contains(i))
               
            }
                System.out.println("!!!beforeoutput" +listofdirectories);
                return listofdirectories;
        }


//////////////////////////////////
/// This is console's log
////////////////////////////////////
AT THE START OF THE METHOD []
FFFFFFFFFFFFFFF
Current node is: name
Current nodedata is: Movies and Pictures
1[Movies and Pictures]
Current node is: directory
Current nodedata is: name
1[Movies and Pictures]
@@[Movies and Pictures]
AT THE START OF THE METHOD []
FFFFFFFFFFFFFFF
Current node is: name
Current nodedata is: Movies
1[Movies]
Current node is: file
Current nodedata is: name
1[Movies]
Current node is: file
Current nodedata is: name
1[Movies]
Current node is: file
Current nodedata is: name
1[Movies]
!!!beforeoutput[Movies]
Current node is: directory
Current nodedata is: name
1[Movies and Pictures, Movies]
@@[Movies and Pictures, Movies]
AT THE START OF THE METHOD []
FFFFFFFFFFFFFFF
Current node is: name
Current nodedata is: Pictures
1[Pictures]
Current node is: file
Current nodedata is: name
1[Pictures]
Current node is: file
Current nodedata is: name
1[Pictures]
Current node is: file
Current nodedata is: name
1[Pictures]
Current node is: directory2.0
Current nodedata is: name
I found direct2.0
name of direct2.0 is Pictures2.0
0[Pictures]
0).5[Pictures, Pictures2.0]
1[Pictures, Pictures2.0]
!!!beforeoutput[Pictures, Pictures2.0]
!!!beforeoutput[Movies and Pictures, Movies, Pictures]
2 [Movies and Pictures, Movies, Pictures] // THIS IS THE OUTPUT
//I WANT THIS TO INCLUDE PICTURES2.0

///////////////////////
//// Example of a tree
//////////////////////

|-- directory
    |-- name
        |-- Movies and Pictures
    |-- directory
        |-- name
            |-- Movies
        |-- file
            |-- name
                |-- Harry Potter.mov
            |-- date
                |-- 20130602
            |-- size
                |-- 1400123
        |-- file
            |-- name
                |-- Dodgeball.avi
            |-- date
                |-- 11111111
            |-- size
                |-- 5000000
        |-- file
            |-- name
                |-- The Dark Knight.mpeg
            |-- date
                |-- 55555555
            |-- size
                |-- 7657657
    |-- directory
        |-- name
            |-- Pictures
        |-- file
            |-- name
                |-- Mountain.png
            |-- date
                |-- 20000000
            |-- size
                |-- 190000
        |-- file
            |-- name
                |-- Flower.jpg
            |-- date
                |-- 140000
            |-- size
                |-- 7657657
        |-- file
            |-- name
                |-- Wildlife.jpeg
            |-- date
                |-- 90000000
            |-- size
                |-- 250000
        |-- directory2.0
            |-- name
                |-- Pictures2.0
List<String> listofdirectories = new ArrayList<>();
thenode.getDirectories();
listofdirectories.addAll(thenode.getDirectories());