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

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

我有一个列表,每个对象都可以包含子元素。我想递归地遍历每个元素,如果元素包含错误的值,就更新它。如果doupdate方法更新了元素,则返回true。
ddmupdated参数在开始时为false

  1. boolean updateRecursive(DDMFormField dDMFormField, List<DDMFormField> dDMFormFieldList, boolean ddmUpdated){
  2. if(!ddmUpdated){
  3. ddmUpdated = doUpdate(dDMFormField);
  4. }else{
  5. doUpdate(dDMFormField);
  6. }
  7. if(!dDMFormFieldList.isEmpty()){
  8. for (DDMFormField fl: dDMFormFieldList){
  9. ddmUpdated = updateRecursive(fl,fl.getNestedDDMFormFields(), ddmUpdated);
  10. }
  11. }
  12. return ddmUpdated;
  13. }

最后,如果我对列表中的至少一个元素做了一些更改,我想返回true。我不知道为什么,它总是返回false,即使doupdate返回true,递归继续执行ddmupdate=true。
有人能提出一个保持真实价值的正确方法吗?

vs3odd8k

vs3odd8k1#

您正在覆盖ddmupdated中递归调用的返回值。请确保仅在值为true时覆盖它,如下所示:

  1. boolean updateRecursive(DDMFormField dDMFormField, List<DDMFormField> dDMFormFieldList, boolean ddmUpdated){
  2. if(!ddmUpdated){
  3. ddmUpdated = doUpdate(dDMFormField);
  4. }else{
  5. doUpdate(dDMFormField);
  6. }
  7. if(!dDMFormFieldList.isEmpty()){
  8. for (DDMFormField fl: dDMFormFieldList){
  9. ddmUpdated = ddmUpdated | updateRecursive(fl,fl.getNestedDDMFormFields(), ddmUpdated);
  10. }
  11. }
  12. return ddmUpdated;

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

展开查看全部

相关问题