java - 递归功能不起作用

原文 标签 java recursion jsoup

我正在编写一个程序,在其中给出页面的路径和提及下一页的标签的名称类。

这是我尝试的代码:

public String pagination_get_link(String path, String pagnNextLink_tag) throws IOException{
        Document doc = Jsoup.parse(new File(path), "UTF-8");
        Element url = doc.getElementById(pagnNextLink_tag);
        String url_s = url.attr("href");
        pagination_get_link(url_s,pagnNextLink_tag);

        return url_s;

    }


页面的示例是这样的页面:
enter link description here

我想做一个递归方法,直到获得所有分页链接的循环。
提前致谢 。

最佳答案

您的递归函数将永远运行,这将使您的程序耗尽堆栈内存并崩溃,如果由于找不到元素而不会崩溃,而是在这种情况下依靠捕获异常而感觉不到就像一个好主意。

进行递归循环时,它必须返回结果,并且如果函数“完成”,则不能再次调用函数本身。
也就是说,如果没有更多数据要处理,那么应该完成它,现在您将继续运行循环直到崩溃为止。

我不确定您希望您的方法如何工作,但是说实话,在这种情况下,您似乎并不需要递归,我建议仅使用常规的while循环或类似方法。



编辑:

如果您真的想使用递归代码,则在url_s为空的情况下在调用函数之前返回应该可以解决问题,例如...

public String pagination_get_link(String path, String pagnNextLink_tag) throws IOException{
    Document doc = Jsoup.parse(new File(path), "UTF-8");
    Element url = doc.getElementById(pagnNextLink_tag);
    String url_s = url.attr("href");
    // Not sure how to check if its empty, so change it to what you need.
    if(url_s == "") { 
      return "";
    }
    pagination_get_link(url_s,pagnNextLink_tag);

    return url_s;
}


现在,当您尝试通过ID或类似方法获取元素时,可能会引发异常,在这种情况下,我宁愿在尝试获取元素之前检查该元素是否存在以及是否具有“ href”属性,以及不,只是在那一点返回。

另外,您不必从函数返回字符串,因为对结果不执行任何操作。将其更改为void并在应返回时仅return;即可。

关于java - 递归功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39435001/

相关文章:

c++ - 简单的递归C++代码不断崩溃

java - 双链表中的递归方法

java - 加速文件系统访问?

javascript - 导出函数中的javascript递归:不是函数

java - 从网站页面提取日期

java - 使用jsoup解析URL时出现404错误

java - 带有ColdFusion的jSoup select()中的意外结果

java - 如何在Linux中设置servlet-api.jar文件的类路径

java - 嵌套类中public构造函数有什么用

java - Java,接口(interface)或常量类的组成