2012-06-19 14 views
6

CzyCzy if() {zrobić {}; while();} dokładnie jak while {}

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

dokładnie jak

while(a) 
{ 
    b(); 
} 

?

+3

możliwy duplikat [pętli testowych u góry lub u dołu? (podczas gdy kontra nie)] (http://stackoverflow.com/questions/224059/test-loops-at-the-top-lub-bottom-while-vs-do-while) – Niko

+0

Przetestuj to :-P http://jsfiddle.net/LvWtY/ –

+0

NIE ... one nie są dokładnie takie same ... do {..} podczas gdy (a) ... upewnią się, że cokolwiek to zrobi, co najmniej raz i następnie dopóki "a" nie jest prawdziwe ... podczas gdy (a) {} ... zrobi się tylko wtedy, gdy "a" jest prawdziwe. – Brian

Odpowiedz

1

Są takie same i podam przykład, w którym naprawdę warto użyć "Do-While" zamiast pętli while.

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

w przeciwieństwie do

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

argument za zastosowaniem do-while jest pokazany powyżej. Założenie, że linia x = superMathClass.performComplicatedCalculation(3.14); nie była tylko jedną linią kodu, a zamiast tego było 25 linii kodu. Jeśli chcesz to zmienić, wrób to, a zmienisz tylko raz. W pętli while musisz ją zmienić dwukrotnie.

Zgadzam się, że wszystkie są wyłączone i powinieneś ich unikać, ale są też argumenty na ich korzyść.

0

Tak, ale powinieneś preferować ten drugi.

1

Tak, są takie same.
Utworzono bardzo nieczytelny sposób na sfałszowanie pętli while za pomocą pętli do-while + if.

Należy przeczytać:
Test loops at the top or bottom? (while vs. do while)

Zastosowanie pętle while gdy chcesz przetestować stan przed pierwszej iteracji pętli.

Użyj do-while pętli, gdy chcesz przetestować warunek po uruchomieniu pierwszej iteracji pętli.

1

Tak, są one równoważne.
Jeśli a jest , , nie zostanie wykonane w ogóle.
Jeśli a jest , b zostanie wykonany, dopóki a nie stanie się a stanie się .
Dotyczy to również obu konstrukcji.

1

Konstrukty są w tym przypadku prawie wymienne, ale myślę, że pętla if do while jest przydatna w niektórych przypadkach, na przykład, jeśli niektóre zmienne muszą być przechowywane przez wszystkie iteracje pętli, ale nie są potrzebne, jeśli Pętla nigdy nie jest wykonywana. (I zakłada się, że może nie być). Na przykład

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

ta może być przydatna optymalizacja, jeśli inicjalizacja tego obiektu jest czas lub pamięci intensywne, a oczekuje się, że ta pętla będzie tylko powodować sporadycznie i zostaną pominięte w większości wykonań odpowiedniej metody.Oczywiście są inne przypadki, w których może być również użyteczny, w zasadzie myślę, że jeśli nie, to powinny być używane, jeśli istnieją rzeczy, które powinny być wykonane przed rozpoczęciem pętli, tylko wtedy, gdy wprowadzona jest twoja pętla.