【问题标题】:Recursive function in While loop-javaWhile循环-java中的递归函数
【发布时间】:2016-03-19 17:58:03
【问题描述】:

我在迭代 cq5 中的节点时遇到问题。 下面是代码,在迭代第一级子节点尝试迭代所有子节点之后。

但是一旦第一级被迭代,所有子节点都不会被迭代。

private void findNodeWithSpace(Node node) {
    try {
        NodeIterator iterator = node.getNodes();
        while (iterator.hasNext()) {
            Node childNode = (Node) iterator.nextNode();
            if (StringUtils.isNotEmpty(childNode.getName())) {
                if (childNode.getName().contains(" ")) {
                    childNode.getPath()
                    count++;
                    LOG.info("**count is**" + count);
                }
                NodeIterator iterator1 = childNode.getNodes();
                if (iterator1 != null) {
                    findNodeWithSpace(childNode);
                }
            }
        }
    } catch (RepositoryException e) {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 到目前为止我看不到递归函数...
  • 在我看来,这将是“深度优先搜索”而不是“广度优先搜索”......?
  • 这不是递归调用。您正在调用其他方法(findChildNodeWithSpace),递归意味着您在该方法中调用相同的方法
  • 代码更改后行为是否发生了变化?
  • 没有,之前忘记修改代码了,问题还是没有解决。

标签: java loops recursion aem


【解决方案1】:

请参考以下代码:

void yourMethod()
{
    Node mainNode = .....; // You somehow get your main node from query or hardcoding the name

   //The Recursive Function starts here. variable "count" should be instance here
    countNumberNodeWithSpaces(mainNode.getNodes());


}   



private void countNumberNodeWithSpaces(NodeIterator  nodeItr)
    {

        while(nodeItr.hasNext())
        {
            Node node =nodeItr.nextNode();


            if(node.getName().contains(" "))
            {   
                count++;

            }
            countNumberNodeWithSpaces(node.getNodes());
        }
    }

【讨论】:

  • 虽然 OP 的代码有一些冗余,但它应该可以工作(更正后,请参阅编辑历史记录)。如果没有他提供有关他的意见的更多信息,我无法将此答案视为问题的解决方案,但却是一种改进。
【解决方案2】:

代码似乎是正确的。如果没有空节点名称,您是否检查了childNodes 是否有节点可以对其进行迭代?

另外,我不知道CQ5,但是由于您将第一个迭代器元素转换为Node,也许您还需要在递归之前将iterator1的元素转换为Node

【讨论】:

  • 我们在做node.nextNode()的时候不需要强制转换。返回类型是 Node 本身。
猜你喜欢
  • 2020-06-28
  • 2012-08-04
  • 1970-01-01
  • 2023-02-22
  • 2022-01-15
  • 2013-08-12
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多