如何使用递归方法在循环中退出呢?

时间:2017-04-19 08:21:26

标签: java recursion while-loop iteration

这是我无法解决的问题。我有一个.xml文件,不是父母和孩子,而是有了孙子和多孙子。每个元素名称都是唯一的,所以我需要一个方法来查找和返回可搜索的元素。到目前为止我的代码:

    public static Element findElement(Element current, String nameOfElement) {
            Element searchedElement = null; // this element I want to return
            List children = current.getChildren(); // current is a root element passed to method
            Iterator iterator = children.iterator();
            //label:
            while (iterator.hasNext()) {
                Element child = (Element)iterator.next();   
                if (child.getName().equals(nameOfElement)) {
                    searchedElement = child; // on some level it founds it
                    System.out.println("!!!"); // it's just a marker to see that action happens
                    //break label;
                    break;
                }
                findElement(child, nameOfElement);
            }
            return searchedElement;     
        }

通常情况下,如果执行条件,则循环应根据中断停止,但这不会发生。我还有一个关于添加标签的想法。 (它在代码中被注释掉了)但它也不起作用。递归开始并擦除变量 searchingElement 值。 我找到了一个解决方案,但它看起来很难看,我想知道上面添加的代码不起作用。我的解决方案是添加而不是递归调用 findElement(child,nameOfElement); 这段代码:

Element el = findElement(child, nameOfElement);
            if (el != null && el.getName().toLowerCase().equals((nameOfElement).toLowerCase())) {
                searchedElement = el;
                return searchedElement;
            }

请帮助找到解决方案!

2 个答案:

答案 0 :(得分:1)

尝试,

 public static Element findElement(Element current, String nameOfElement) {
        Element searchedElement = null; // this element I want to return
        List children = current.getChildren(); // current is a root element passed to method
        Iterator iterator = children.iterator();
        //label:
        while (iterator.hasNext()) {
            Element child = (Element)iterator.next();   
            if (child.getName().equals(nameOfElement)) {
                searchedElement = child; // on some level it founds it
                System.out.println("!!!"); // it's just a marker to see that action happens
                //break label;
                break;
            }
            searchElement = findElement(child, nameOfElement);
            if(searchElement != null)
                return searchElement;

        }
        return searchedElement;     
    }

答案 1 :(得分:0)

您只需要返回递归调用的值

 public static Element findElement(Element current, String nameOfElement) {
        Element searchedElement = null; // this element I want to return
        List children = current.getChildren(); // current is a root element passed to method
        Iterator iterator = children.iterator();
        //label:
        while (iterator.hasNext()) {
            Element child = (Element)iterator.next();   
            if (child.getName().equals(nameOfElement)) {
                searchedElement = child; // on some level it founds it
                System.out.println("!!!"); // it's just a marker to see that action happens
                //break label;
                break;
            }
            searchedElement = findElement(child, nameOfElement);//HERE !!!
        }
        return searchedElement;     
    }