递归函数不起作用

时间:2016-09-11 10:12:24

标签: 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

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

1 个答案:

答案 0 :(得分:1)

你的递归函数将继续运行,这会使你的程序耗尽堆栈内存并崩溃,如果它没有因为没有找到一个元素而崩溃,而是依赖于在一个案例中捕获异常这样的感觉不是一个好主意。

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

我不确定你希望你的方法如何工作,但老实说,在这种情况下,你似乎并不需要递归,我建议只使用正常的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"尝试获取它之前的属性,如果没有,则返回该点。

此外,您不必从函数返回字符串,因为您对结果不执行任何操作。将其更改为无效,并在应该返回时将其更改为return;

相关问题