我有一个如下所示的树(一个简单的例子,可以是一个可变大小)。
1 (root)
|---------------------------------|
1-1 1-2
|------------| |--------------|
1-1-1 1-1-2 1-2-1 1-2-2
我编写了一个Java类来生成基于NumberOfSiblings(水平)和NumberOfChildren(垂直)的树。我现在正在编写一个类,它将在树中生成给定条目的路径,例如:
Entry: 1-1-1
Path: /1/1-1/1-1-1
我相信我需要某种递归方法来计算破折号并取下条目的最后部分(不总是长度() - 2,尽管它可能是10-10-10)。
这是生成树的方法:
public static void generateCatalog(String parent, int siblings, int children, int level) {
for (int a = 1; a <= siblings; a++) {
String child = parent + "-" + a;
System.out.println(child);
if (level <= children) {
level++;
generateCatalog(child, siblings, children, level);
level--;
}
}
}
我一直在尝试这样的东西来生成路径,但它不能很好地工作。
public static void getPath(String category, String path) {
System.out.println("Category: " + category);
System.out.println("Current path: " + path);
int numberOfDashes = category.length() - category.replace("-", "").length();
System.out.println("Number of dashes: " + numberOfDashes);
while (numberOfDashes > 1) {
path = category + "/" + category.substring(0, category.length() - 2);
getPath(category, path);
}
System.out.println("New path: " + path);
}
有人可以告诉我最好的方法吗?
答案 0 :(得分:1)
而不是
path = category + "/" + category.substring(0, category.length() - 2);
尝试
int endIndex = category.lastIndexOf("-");
if(endIndex != -1) {
path = category + "/" + category.subString(0, endIndex);
}
如果没有破折号,不确定你想做什么,只是坚持在else
区块。