2012-06-19 6 views
6

IstIst if() {do {}; while();} genau wie während {}

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

genau wie

while(a) 
{ 
    b(); 
} 

?

+3

mögliches Duplikat von [Testschleifen oben oder unten? (während vs während tun)] (http://stackoverflow.com/questions/224059/test-loops-at-the-top-or-bottom-while-vs--do-while) – Niko

+0

Testen Sie es: -P http://jsfiddle.net/LvWtY/ –

+0

NEIN ... sie sind nicht genau die gleichen ... tun {..} while (a) ... wird sicherstellen, was auch immer es getan wird, mindestens einmal und dann bis 'a' ist nicht wahr .... while (a) {} ... wird nur tun, wenn 'a' wahr ist. – Brian

Antwort

1

Sie sind die gleichen und ich werde ein Beispiel geben, wo Sie eigentlich die "Do-While" anstelle einer While-Schleife verwenden möchten.

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

im Gegensatz zu

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

Das Argument für eine Do-While verwendet, ist oben gezeigt. Angenommen, die Zeile war nicht nur eine Zeile Code und stattdessen 25 Zeilen Code. Wenn Sie es ändern müssen, während Sie es nur einmal ändern würden. In der while-Schleife müssten Sie es zweimal ändern.

Ich stimme zu tun, während Sie ausgeschaltet sind und Sie sollten sie vermeiden, aber es gibt Argumente zu ihren Gunsten auch.

0

Ja, aber Sie sollten die letztere bevorzugen.

1

Ja, sie sind gleich.
Sie haben eine sehr unlesbare Möglichkeit geschaffen, die while Schleife mit do-while Schleife + if zu verspotten.

Sie sollten dies lesen:
Test loops at the top or bottom? (while vs. do while)

Verwenden während Schleifen, wenn Sie einen Zustand vor der ersten Iteration der Schleife testen möchten.

Verwenden Sie die Do-while-Schleife, wenn Sie eine Bedingung nach dem Ausführen der ersten Iteration der Schleife testen möchten.

1

Ja, sie sind gleichwertig.
Wenn afalse ist, wird b überhaupt nicht ausgeführt.
Wenn atrue ist, wird b ausgeführt, bis afalse wird.
Dies gilt gleichermaßen für beide Konstrukte.

1

Die Konstrukte sind in diesem Fall ziemlich austauschbar, aber ich denke, dass die if do while-Schleife in einigen Fällen nützlich ist, zum Beispiel wenn einige Variablen durch alle Iterationen der Schleife gehalten werden müssen, aber nicht benötigt werden Schleife wird nie ausgeführt. (Und es wird angenommen, dass es möglicherweise nicht.) Zum Beispiel

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

Dies ist eine nützliche Optimierung sein kann, wenn die Initialisierung dieses Objekts Zeit oder speicherintensiv ist, und es wird erwartet, dass diese Schleife nur gelegentlich auslösen und wird in den meisten Ausführungen der relevanten Methode übersprungen.Natürlich gibt es andere Fälle, in denen es auch nützlich sein könnte, im Grunde denke ich, dass die if-do-while verwendet werden sollte, wenn es Dinge gibt, die ausgeführt werden sollten, bevor Ihre Schleife startet, nur wenn Ihre Schleife eingegeben wird.