Java 递归方法调用

Java 递归方法调用,java,recursion,Java,Recursion,我必须做如上所述的事情。如果我没有连接到一个URL,那么我将尝试使用另一个URL。同样,有10个URL,我必须一个接一个地尝试 我将如何递归地编写该方法 getUrl()具有读取属性文件的逻辑,并提供10个随机URL。 cleanUpUrl(url)与设置url的过期时间有关,如果url无效,将设置某些属性等 编辑:对不起,我想我错过了什么。递归,因为在(我获得连接)或(所有URL都无效并且引发了不同的异常)之前,我确实进行了方法调用。循环10次可能没有帮助,因为getUrl()的随机逻辑可能会

我必须做如上所述的事情。如果我没有连接到一个URL,那么我将尝试使用另一个URL。同样,有10个URL,我必须一个接一个地尝试

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

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


编辑:对不起,我想我错过了什么。递归,因为在(我获得连接)或(所有URL都无效并且引发了不同的异常)之前,我确实进行了方法调用。循环10次可能没有帮助,因为getUrl()的随机逻辑可能会多次拾取同一URL

以下内容有意义吗

String url = getUrl();
try{
Connection con = getConnection(url, username, pwd);
}catch(ConnectionException e){
  cleanUpUrl(url);
  url = getUrl();
  con = getConnection(url, username, pwd);
}
当所有URL都无效时,getUrl()将引发异常。

是否递归?为什么?

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

递归?为什么?

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

我会将“搜索合适的url”放在一个方法中,循环代码10次,然后返回您认为适合打破循环的url。(在循环下面,您可以返回null,表示10个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);
公共字符串findGoodUrl(){
对于(int i=0;i<10;i++){
字符串url=getUrl();
试一试{
Connection con=getConnection(url、用户名、pwd);
返回url;
}捕获(连接异常e){
清除url(url);
}
}
返回null;
}
我会将“搜索合适的url”放在一个方法中,在代码中循环10次,然后返回适合跳出循环的url。(在循环下面,您可以返回null,表示10个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);
公共字符串findGoodUrl(){
对于(int i=0;i<10;i++){
字符串url=getUrl();
试一试{
Connection con=getConnection(url、用户名、pwd);
返回url;
}捕获(连接异常e){
清除url(url);
}
}
返回null;
}

堆栈溢出的停止条件是什么


如果您创建了一个“while”循环,这有关系吗?

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


创建“while”循环是否重要?

为什么要递归执行此操作?递归的原则之一是需要一个停止条件。你需要定义你要做多少次尝试。如果随机获取URL,在检查所有10个URL之前,可能会出现堆栈溢出。@Fernando:同意。这里的停止条件是-I get connection或getUrl()抛出异常。但当它抛出异常时,您执行相同的过程(我知道您希望执行递归),从而陷入无限循环。对吗?为什么要递归地执行此操作?递归的原则之一是需要一个停止条件。你需要定义你要做多少次尝试。如果随机获取URL,在检查所有10个URL之前,可能会出现堆栈溢出。@Fernando:同意。这里的停止条件是-I get connection或getUrl()抛出异常。但当它抛出异常时,您执行相同的过程(我知道您希望执行递归),从而陷入无限循环。对吗?您可能需要放置
返回url
块内尝试
块。;-)您可能需要放置
返回url
块内尝试
块。;-)递归,因为在(我获得连接)或(所有URL都无效并且引发了不同的异常)之前,我确实进行了方法调用。循环10次可能没有帮助,因为getUrl()的随机逻辑可能会多次选择同一个URL。@HanuAthena:对不起,我不明白。如果
getUrl()
可以多次选择同一个URL,那么在递归方法中为什么会有任何不同?如果要尝试某项操作直到满足某个条件,请使用
while
循环,而不是
for
循环。仍然不需要递归。此外,如果10不是一个硬限制,为什么不循环直到url为非空(顺便说一句,这样做通常不是一个好主意。最好对循环次数有某种可配置的限制)。+1:递归有时是一个优雅的使用模型,但不适用于普通的旧循环。“当你只有一个锤子时,一切看起来都像钉子”?递归的,因为我在(我得到连接)或(所有的URL都无效并且引发了不同的异常)之前都进行了方法调用。循环10次可能没有帮助,因为getUrl()的随机逻辑可能会多次选择同一个URL。@HanuAthena:对不起,我不明白。如果
getUrl()
可以多次选择同一个URL,那么在递归方法中为什么会有任何不同?如果要尝试某项操作直到满足某个条件,请使用
while
循环,而不是
for
循环。仍然不需要递归。此外,如果10不是一个硬限制,为什么不循环直到url为非空(顺便说一句,这样做通常不是一个好主意。最好对循环次数有某种可配置的限制)。+1:递归有时是一个优雅的使用模型,但不适用于普通的旧循环。“当你只有一把锤子时,一切看起来都像钉子”?