大家好,感谢您的帮助。 我有这个在控制台中打印的递归方法。
private void printPath(Vertex destiny) {
if (destiny.getPrevious() != null) {
printPath(destiny.getPrevious());
System.out.print(" to ");
}
System.out.print(destiny.getName());
}
但是现在我需要返回连接的String而不是打印。 我有这种糟糕的尝试......
private String printPath(Vertex destiny, String concat) {
if (destiny.getPrevious() == null) {
return " , " + concat;
} else {
return printPath(destiny, (destiny.getName() + " " + concat));
}
}
但是我无法使它工作,它给了我一个StackOverflowException。
编辑: 输出到控制台是例如: “西班牙到德国到波兰到希腊”...... 而且我希望在String中返回它。
答案 0 :(得分:1)
您的方法未正确终止,请尝试以下操作:
private String printPath(Vertex destiny, String concat) {
if (destiny.getPrevious() == null) {
return " , " + concat;
} else {
return printPath(destiny.getPrevious(), (destiny.getName() + " " + concat));
}
}
将destiny.getPrevious()
而不是destiny
传递给方法。
答案 1 :(得分:0)
这个怎么样:
private StringBuilder printPath(Vertex destiny, StringBuilder path) {
if (destiny.getPrevious() != null) {
printPath(destiny.getPrevious(), path);
path.append(" to ") ;
}
path.append(destiny.getName());
return path;
}
答案 2 :(得分:0)
如果您期望产量为“西班牙到德国到波兰到希腊”
案例1:如果destiny.getPrevious()== null,那么它将仅在第一个代码中返回destiny.getName()。
案例2:如果destiny.getPrevious()!= null则会将第一个元素返回到最后一个元素
private String printPath(Vertex destiny, String concat) {
if (destiny.getPrevious() == null) {
return destiny.getName() + concat;
} else {
return printPath(destiny.getPrevious(), (" to " + destiny.getName() + concat));
}
}