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

Je dois faire quelque chose comme ci-dessus. Si je ne reçois pas de connexion avec une URL, je vais essayer avec une autre URL. De même, il y a 10URL que je dois essayer les uns après les autres.appels de méthode récursive

Comment vais-je écrire la méthode de manière récursive?

getUrl() a la logique de lire le fichier de propriétés et vous donne URL au hasard sur 10. cleanUpUrl(url) a quelque chose à voir avec le réglage de l'heure d'expiration de l'URL, si l'URL est valide, une propriété sera définie, etc.

EDIT: Désolé, je pense que j'ai raté quelque chose. Récursive parce que j'ai fait les appels de méthode jusqu'à (j'obtiens la connexion) ou (toutes les URL sont invalides et une exception différente est levée). Boucler 10times peut ne pas aider parce que la logique aléatoire de getUrl() peut choisir la même URL plus d'une fois.

Est-ce que ce qui suit a du sens? GetUrl() lancera une exception si toutes les URL ne sont pas valides.

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); 

+0

Pourquoi voulez-vous procéder de manière récursive? –

+0

L'un des principes de récursion est que vous avez besoin d'une condition d'arrêt. Vous devez définir le nombre d'essais que vous ferez. Si vous obtenez les URL de manière aléatoire, vous pouvez obtenir un StackOverflow avant de vérifier les 10 URL. –

+0

@Fernando: D'accord. Ici la condition d'arrêt est - j'obtiens une connexion ou getUrl() lance Exception. – HanuAthena

Répondre

1

Quelle est la condition d'arrêt, un débordement de pile?

Cela aura-t-il une importance si vous avez créé une boucle "while"?

6

Récursivement? Pourquoi?

Si vous voulez essayer 10 choses d'affilée, utilisez une boucle for.

+0

Récursif car je fais les appels de méthode jusqu'à (j'obtiens la connexion) ou (toutes les URL sont invalides et une exception différente est levée). Boucler 10times peut ne pas aider parce que la logique aléatoire de getUrl() peut choisir la même URL plus d'une fois. – HanuAthena

+1

@HanuAthena: Désolé, je ne comprends pas. Si 'getUrl()' peut choisir la même URL plus d'une fois, pourquoi pensez-vous que ce serait différent dans une approche récursive? Si vous voulez essayer quelque chose * jusqu'à ce qu'une condition soit remplie, utilisez une boucle 'while' au lieu d'une boucle' for'. Toujours pas besoin de récursivité. – Tomalak

+0

Aussi, si le 10 n'est pas une limite stricte, pourquoi ne pas boucler jusqu'à ce que l'url soit non nulle (sur une note de côté, ce n'est généralement pas une bonne idée de le faire.) Il vaut mieux avoir une sorte de configurable limite pour le nombre de fois que vous bouclez). – Gangadhar

1

Je mettrais la "recherche d'une URL correcte" dans une méthode, bouclerais 10 fois le code, et retournerais l'URL que vous jugiez approprié pour sortir de la boucle. (Ci-dessous la boucle, vous pouvez retourner null pour indiquer qu'aucun des 10 urls était appropriée.)

Quelque chose comme

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

Vous voudrez peut-être mettre le 'return url;' dans le bloc 'try'. ;-) – Tomalak

+0

Bon point;) ... – aioobe

Questions connexes