java在递归方法中保留布尔值

aoyhnmkz  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(461)

我有一个列表,每个对象都可以包含子元素。我想递归地遍历每个元素,如果元素包含错误的值,就更新它。如果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。我不知道为什么,它总是返回false,即使doupdate返回true,递归继续执行ddmupdate=true。
有人能提出一个保持真实价值的正确方法吗?

vs3odd8k

vs3odd8k1#

您正在覆盖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;

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

相关问题