Java在递归方法中保持布尔值



我有一个列表,每个对象都可以包含子元素。我想递归地遍历每个元素,如果元素包含一些错误的值,则更新它。如果doUpdate方法更新了元素,则返回true。

ddmUpdated参数在开始时为false

boolean updateRecursive(DDMFormField dDMFormField, List<DDMFormField> dDMFormFieldList, boolean ddmUpdated){
if(!ddmUpdated){
ddmUpdated = doUpdate(dDMFormField);
}else{
doUpdate(dDMFormField);
}
if(!dDMFormFieldList.isEmpty()){
for (DDMFormField fl: dDMFormFieldList){
ddmUpdated =   updateRecursive(fl,fl.getNestedDDMFormFields(), ddmUpdated);
}
}
return ddmUpdated;
}

最后,如果我对列表的至少一个元素做了一些更改,我希望返回true。我不知道为什么,即使doUpdate返回true,递归继续ddmUpdated=true,它也总是返回false。

有人能提出一个保持真正价值的正确方法吗?

您正在覆盖ddmUpdated中递归调用的返回值。确保只有在值为true时才覆盖它,如下所示:

boolean updateRecursive(DDMFormField dDMFormField, List<DDMFormField> dDMFormFieldList, boolean ddmUpdated){
if(!ddmUpdated){
ddmUpdated = doUpdate(dDMFormField);
}else{
doUpdate(dDMFormField);
}
if(!dDMFormFieldList.isEmpty()){
for (DDMFormField fl: dDMFormFieldList){
ddmUpdated =  ddmUpdated |  updateRecursive(fl,fl.getNestedDDMFormFields(), ddmUpdated);

}
}
return ddmUpdated;

如果其中一个参数为true,则或运算符|将返回true。

最新更新