Java递归不迭代所有顶级元素
我面临一个递归问题。我有一个对象,它有一个自己的列表,列表中的每个对象都有一个自己的列表。此对象表示一棵树 现在我想迭代所有可能的对象以找到一个特定的对象,但我失败了。目前我的方法没有返回到顶层,我不知道如何修复它 方法:Java递归不迭代所有顶级元素,java,recursion,Java,Recursion,我面临一个递归问题。我有一个对象,它有一个自己的列表,列表中的每个对象都有一个自己的列表。此对象表示一棵树 现在我想迭代所有可能的对象以找到一个特定的对象,但我失败了。目前我的方法没有返回到顶层,我不知道如何修复它 方法: private Object selectSpecificItem(TreeObject treeObject) { for (TreeObject to : treeObject.getChildren()) { Object data = to.g
private Object selectSpecificItem(TreeObject treeObject) {
for (TreeObject to : treeObject.getChildren()) {
Object data = to.getData();
if (data instanceof PaymentOffice) {
PaymentOffice po = (PaymentOffice) data;
if (po.getCode().equals(getModelObject().getLocation())) {
return to;
}
} else if (to.getChildren().length > 0) {
selectSpecificItem(to);
}
}
return null;
}
假设以下列表结构:
Item1
- Item1.1
- Item1.2
- Item1.3
- Item1.4
Item2
Item3
现在它迭代所有1/1.x项,但不是2/3项。我现在需要找到的项目是Item3
如何更改递归以迭代所有元素?您忽略了递归调用返回的值。您应该检查递归调用是否返回非
null
值,如果返回,则返回它
private Object selectSpecificItem(TreeObject treeObject) {
Object result = null;
for (TreeObject to : treeObject.getChildren()) {
Object data = to.getData();
if (data instanceof PaymentOffice) {
PaymentOffice po = (PaymentOffice) data;
if (po.getCode().equals(getModelObject().getLocation())) {
return to;
}
} else if (to.getChildren().length > 0) {
result = selectSpecificItem(to);
if (result != null) {
return result;
}
}
}
return result;
}
有些人喜欢在方法的末尾有一个return
语句。如果你是这样一个人,你可以写:
private Object selectSpecificItem(TreeObject treeObject) {
Object result = null;
for (TreeObject to : treeObject.getChildren()) {
Object data = to.getData();
if (data instanceof PaymentOffice) {
PaymentOffice po = (PaymentOffice) data;
if (po.getCode().equals(getModelObject().getLocation())) {
result = to;
break;
}
} else if (to.getChildren().length > 0) {
result = selectSpecificItem(to);
if (result != null) {
break;
}
}
}
return result;
}
您可能需要更改
selectSpecificItem(至)代码>至返回selectSpecificItem(至)代码>在您的else中if@Lino我也试过了,但是没有任何改变。你有任何根树对象,它将保存Item1,Item2。Item3作为它的子项?@NisheshPratap是的,它作为第一个调用传入。您没有迭代其他两个项,因为在第一个项中,您已经返回了一些内容,您还可以中断for循环,而不是在else if中返回结果
,哪一个才是最好的same@Lino是的,非常感谢。它现在确实返回了正确的元素