2012-06-19 8 views
6

Èè che se() {fare {}; while();} esattamente come mentre {}

if(a) 
{ 
    do 
    { 
     b(); 
    } 
    while(a); 
} 

esattamente come

while(a) 
{ 
    b(); 
} 

?

+3

possibile duplicato di [Test loop in alto o in basso? (while vs. do while)] (http://stackoverflow.com/questions/224059/test-loops-at-the-top-or-bottom-while-vs-do-while) – Niko

+0

Provalo :-P http://jsfiddle.net/LvWtY/ –

+0

NO ... non sono esattamente uguali ... do {..} mentre (a) ... farà in modo che tutto ciò sia fatto almeno una volta e quindi finché 'a' non è vero .... while (a) {} ... farà solo quando 'a' è vero. – Brian

risposta

1

Sono uguali e fornirò un esempio in cui si potrebbe effettivamente voler utilizzare il "Do-While" anziché un ciclo while.

do{ 
    x = superMathClass.performComplicatedCalculation(3.14); 
} 
while (x < 1000); 

al contrario di

x = superMathClass.performComplicatedCalculation(3.14); 
while (x < 1000); 
{ 
     x = superMathClass.performComplicatedCalculation(3.14); 
} 

L'argomento per l'utilizzo di un Do-While è mostrato sopra. Assumere la riga x = superMathClass.performComplicatedCalculation(3.14); non era solo una riga di codice e invece era 25 righe di codice. Se devi cambiarlo, nel fare mentre lo cambierai solo una volta. Nel ciclo while dovresti cambiarlo due volte.

Sono d'accordo, mentre sono spenti e dovresti evitarli, ma ci sono anche argomenti a loro favore.

0

, ma si dovrebbe preferire quest'ultimo.

1

Sì, sono gli stessi.
Hai creato un modo molto illeggibile per simulare il ciclo while con il ciclo do-while + if.

Si consiglia di leggere questo:
Test loops at the top or bottom? (while vs. do while)

Usa mentre loop quando si vuole testare la condizione prima della prima iterazione del ciclo.

Utilizzare do-while loop quando si desidera verificare una condizione dopo aver eseguito la prima iterazione del ciclo.

1

Sì, sono equivalenti.
Se a è false, b non verrà eseguito affatto.
Se a è true, b verrà eseguito fino a a diventa false.
Ciò vale anche per entrambi i costrutti.

1

In questo caso i costrutti sono praticamente intercambiabili, ma penso che il ciclo if do while sia utile in alcuni casi, ad esempio se alcune variabili devono essere mantenute attraverso tutte le iterazioni del ciclo, ma non sono necessarie se il il ciclo non viene mai eseguito. (E si presume che potrebbe non essere). Per esempio

 if (condition) { 
      LargeComplexObject object = new LargeComplexObject(); 
      do { 
       some action 
       ... 
       object.someMethod(); 
       ... 
       more actions 
      } 
      while (condition); 
     } 

Questo può essere un ottimizzazione utile se l'inizializzazione di quell'oggetto è il tempo o intensivo di memoria, e si prevede che questo ciclo innescherà solo occasionalmente e verrà saltato nella maggior parte delle esecuzioni del metodo pertinente.Ovviamente ci sono altri casi in cui potrebbe essere utile, in pratica penso che l'if-do-while dovrebbe essere usato se ci sono cose che dovrebbero essere eseguite prima che il ciclo si avvii, solo quando il ciclo è inserito.