2010-08-10 93 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