代码之家  ›  专栏  ›  技术社区  ›  Александр Берестов

如何使用递归从循环返回对象

  •  -1
  • Александр Берестов  · 技术社区  · 2 年前

    它找到了need对象,但总是返回null。 我有无限的内部列表

    private static Budget recursion(Budget budget, long sec) {
        boolean flag;
    
        do {
            flag = false;
            if (Objects.equals(budget.getSection(), sec)) {
                return budget;
            }
            budget.getSubBudget().forEach(b -> recursion(b, sec));
    
        } while (flag);
    
        return null;
    }
    

    如果打印结果为if()条件,则工作正常

    1 回复  |  直到 2 年前
        1
  •  1
  •   trincot    2 年前

    您的代码会忽略递归调用返回的内容。它可能是你感兴趣的对象,但你的 forEach 将丢弃该信息并继续循环。这个 while 循环没有任何作用,因为在每次迭代中都会检查相同的对象,并且 flag 从未设置为 true .

    不相关,但您不需要 Object.equals 进行比较 long 价值观

    你会想要这样的东西:

    private static Budget recursion(Budget budget, long sec) {
        if (budget.getSection() == sec) {
            return budget;
        }
        for (Budget b : budget.getSubBudget()) {
            Budget result = recursion(b, sec);
            if (result != null) {
               return result; 
            }
        }
        return null;
    }