递归方法调用

发布于 2024-09-14 04:50:10 字数 878 浏览 3 评论 0原文

String url = getUrl();
try{
Connection con = getConnection(url, username, pwd);
}catch(ConnectionException e){
  cleanUpUrl(url);
  url = getUrl();
  con = getConnection(url, username, pwd);
}

我必须做类似上面的事情。如果我没有通过一个 URL 获得连接,那么我将尝试使用另一个 URL。同样,有 10 个 URL,我必须逐一尝试。

我将如何递归地编写该方法?

getUrl() 具有读取属性文件的逻辑,并为您提供 10 个随机 URL。 cleanUpUrl(url) 与设置 URL 的过期时间有关,如果 url 无效,则会设置某些属性等。

编辑:抱歉,我想我错过了一些东西。递归,因为我确实进行了方法调用,直到(我获得连接)或(所有 URL 均无效并引发不同的异常)。循环 10 次可能没有帮助,因为 getUrl() 的随机逻辑可能会多次选择相同的 URL。

下面这段话有道理吗?

Connection con = null;
do{
 String url = getUrl();
 try{
  Connection con = getConnection(url, username, pwd);
 }catch(ConnectionException e){
  cleanUpUrl(url);
  continue;
 }catch(Exception e){
  return null;
 }
}while(con !=null);

当所有 url 无效时 getUrl() 将抛出异常。

String url = getUrl();
try{
Connection con = getConnection(url, username, pwd);
}catch(ConnectionException e){
  cleanUpUrl(url);
  url = getUrl();
  con = getConnection(url, username, pwd);
}

I've to do something like above. if I don't get Connection with one URL then I'll be trying with another URL. Likewise there are 10URLs which I've to try one after the other.

How will I write the method recursively?

getUrl() has the logic to read the properties file and gives you random URL out of 10.
cleanUpUrl(url) has something to do with the setting the expiry time of the URL, if the url is invalid, some property will be set etc etc.

EDIT: Sorry I think I missed something. Recursive because I've do make the method calls until (I get the connection) or (all the URLs are invalid and a different exception is thrown). Looping 10times might not help because the getUrl()'s random logic might pick the same URL more than once.

Does the following makes sense?

Connection con = null;
do{
 String url = getUrl();
 try{
  Connection con = getConnection(url, username, pwd);
 }catch(ConnectionException e){
  cleanUpUrl(url);
  continue;
 }catch(Exception e){
  return null;
 }
}while(con !=null);

getUrl() will throw exception when all urls are invalid.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

碍人泪离人颜 2024-09-21 04:50:10

递归地?为什么?

如果您想连续尝试 10 件事,请使用 for 循环。

Recursively? Why?

If you want to try 10 things in a row, use a for loop.

小伙你站住 2024-09-21 04:50:10

停止条件是什么,堆栈溢出?

如果您创建了“while”循环,这会重要吗?

What's the stop condition, a stack overflow?

Will it matter if you created a "while" loop?

长途伴 2024-09-21 04:50:10

我会将“搜索正确的 url”放在一个方法中,循环代码 10 次,然后返回您认为适合跳出循环的 url。 (在循环下面,您可以返回 null 来指示这 10 个 url 中没有一个是合适的。)

类似

public String findGoodUrl() {
    for (int i = 0; i < 10; i++) {
        String url = getUrl();
        try{
            Connection con = getConnection(url, username, pwd);
            return url;
        } catch(ConnectionException e) {
            cleanUpUrl(url);
        }
    }
    return null;
}

I would put the "search for a proper url" in a method, loop though the code 10 times, and return the url you found suitable to break out of the loop. (Below the loop you could return null to indicate that none of the 10 urls was suitable.)

Something like

public String findGoodUrl() {
    for (int i = 0; i < 10; i++) {
        String url = getUrl();
        try{
            Connection con = getConnection(url, username, pwd);
            return url;
        } catch(ConnectionException e) {
            cleanUpUrl(url);
        }
    }
    return null;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文