gpt4 book ai didi

java - 使用递归函数构建 map

转载 作者:行者123 更新时间:2023-12-01 09:22:22 25 4
gpt4 key购买 nike

该函数的想法是,它将构建一个包含键(路径)和与该路径对应的数据的映射。这就是为什么我在构建 map 时不断将其传回的原因。

问题似乎是它已经到了没有子级的地步,但仍然将下一个路径附加到当前路径上:

路径的输入始终以“/”开头。我们为此获取子级,可能是 level_1A、level_1C、level_1B。然后我对每一个进行递归,看看它们是否有 child 。

假设 level_1A 具有子 level_2A、level_2B。不知何故,算法被捕获并像这样附加:

/level_1A/level_2B/level_2A

然而,它应该单独处理这些,如下所示:

/level_1A/level_2A
/level_1A/level_2B

整个结构如下:

/level_1A            data_1A
/level_1A/level_2A data_2A
/level_1A/level_2B data_2B

/level_1B (empty)

/level_1C (empty)

这是递归方法:

public Map<String, String> getAll(String path, Map<String, String> all) throws Exception {

List<String> children = client.getChildren().forPath(path);

if(children != null && children.size() > 0) {

for(String child: children) {
System.out.println("child: " + child);
if(!path.equals("/")) {
path = path + "/" + child;
} else {
path = path + child;
}

Stat stat = client.checkExists().watched().forPath(path);

if(stat != null && stat.getDataLength() > 0) {
all.put(path, new String(client.getData().forPath(path)));
}

getAll(path, all);
}

}

return all;
}

最佳答案

错误在这里:

 for(String child: children) {           
if(!path.equals("/")) {
path = path + "/" + child;
} else {
path = path + child;
}
...
}

path 变量超出了 for 循环 范围,因此在第一次迭代中您修改了路径变量,并且在第二次迭代中修改后的值与第二个值连接起来 child ,然后被传递得更深。

所以只需提供 for 循环作用域变量并在迭代中使用它:

 for(String child: children) {
String pathChild = path;
if(!path.equals("/")) {
pathChild = path + "/" + child;
} else {
pathChild = path + child;
}
//pathChild is used below
...
}

关于java - 使用递归函数构建 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40089963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com