2009-07-21 4 views
1

J'ai un quelque chose de code comme celui-ciJava: Impact de l'utilisation de « si » au lieu de while lors d'une itération

Enumeration parameterEnum = request.getParameterNames() 
while(parameterEnum.hasMoreElements()){} 

Quelle est la différence si je le change d'une instruction while dans une instruction if?

+0

si avec une pause dans une boucle while (true)? – PeterMmm

+3

Une autre façon de faire est de l'essayer. Vous avez javac et vous pouvez essayer toutes sortes de choses. Alors votre question pourrait soit obtenir une réponse, ou vous pourriez dire: «Je reçois ce résultat ... pourquoi?" Bonne chance. –

+1

Notez également, pendant que nous sommes là: en Java, vous devriez nommer vos instances de variables avec des noms en minuscules. Donc Enumeration parameterEnum ... –

Répondre

3

Si vous le modifiez en if, il s'exécutera une fois ou pas du tout - une instruction while s'exécutera indéfiniment jusqu'à ce que ParameterEnum.hasMoreElements() renvoie la valeur false.

+0

Je pense que c'est ce que je cherche. Merci! –

+0

J'ai pensé que c'était une question piège. Je me sens suspect aujourd'hui. – skaffman

+0

Je suis toujours assez suspect. Je pense que c'était une question de devoirs. –

1

Le si sera beaucoup, beaucoup plus rapide !!! sa complexité est O(1) et celle de tandis que est O(N) !!!

Ainsi, plus l'entrée est, plus il est d'utiliser un si au lieu d'un tout ;-)

+1

Où est le bouton pour monter et descendre en même temps? –

+1

Je ne sais pas xD mais vote juste au cas où :-p – fortran

+0

Je n'ai jamais vu quelqu'un si excité à propos de big-'O'. –

2

Si je comprends ce que vous demandez, le code actuel serait continuer à courir tout est entre parenthèses jusqu'à ce qu'il n'y ait pas d'éléments. Cela suppose que ce qui est entre parenthèses enlève des éléments. Comme indiqué ci-dessus, c'est une boucle infinie et ne finira jamais.

Si vous convertissez le while en if, les parenthèses ne seront exécutées qu'une seule fois.

Si Request.getParameterNames() retourne un "vide" quel qu'il soit, alors aucun des deux ne fera quoi que ce soit.

0

Vous pensez peut-être à une instruction for, pas à if.

if(ParameterEnum.hasMoreElements()) {} 

Le if ne fonctionnera une fois

while(ParameterEnum.hasMoreElements()) {} 

l'while fonctionnera de façon continue, à moins que vous incrémenter le enum.

l'autre option est for:

for(Enumeration paramEnum = Request.getParameterNames(); 
           parameEnum.hasMoreElements();) {} 

ce qui est similaire à la while, et se poursuivra aussi longtemps que la méthode renvoie true hasMoreElements(), incrémenter de sorte que le ENUM avec nextElement() est important.

Questions connexes