2010-08-10 54 views
1
String url = getUrl(); 
try{ 
Connection con = getConnection(url, username, pwd); 
}catch(ConnectionException e){ 
    cleanUpUrl(url); 
    url = getUrl(); 
    con = getConnection(url, username, pwd); 
} 

我必须做类似上面的事情。如果我没有通过一个网址获得连接,那么我会尝试使用另一个网址。同样的,我还有10个URL需要依次尝试。递归方法调用

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

getUrl()具有读取属性文件的逻辑,给你随机URL出10 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()会抛出异常。

+0

为什么你想要递归地做这件事? – 2010-08-10 12:19:42

+0

递归原理之一是你需要一个停止条件。你需要定义你会做多少次尝试。如果您随机获取网址,则在检查全部10个网址之前,您可能会收到一个StackOverflow。 – 2010-08-10 12:36:48

+0

@Fernando:同意。这里停止条件是 - 我得到一个连接或getUrl()抛出异常。 – HanuAthena 2010-08-10 12:39:42

回答

1

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

如果您创建了“while”循环,会否影响?

6

递归?为什么?

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

+0

递归,因为我已经做了方法调用直到(我得到连接)或(所有的URL都是无效的,并抛出了一个不同的异常)。循环10次可能没有帮助,因为getUrl()的随机逻辑可能会多次选择相同的URL。 – HanuAthena 2010-08-10 12:26:38

+1

@HanuAthena:对不起,我不明白。如果'getUrl()'可以不止一次地选择相同的URL,为什么你认为这在递归方法中会有所不同?如果你想尝试一些*直到满足条件,则使用'while'循环而不是'for'循环。仍然不需要递归。 – Tomalak 2010-08-10 13:33:52

+0

此外,如果10不是硬限制,为什么不循环直到url非空(在一个侧面注释中,这通常不是一个好主意,最好是有一些可配置的限制你循环的次数)。 – Gangadhar 2010-08-10 13:34:27

1

我会在方法中放置“搜索正确的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; 
} 
+0

你可能想把'return url;'放在'try'块内。 ;-) – Tomalak 2010-08-10 12:25:22

+0

好点;)... – aioobe 2010-08-10 12:26:09