2013-12-09 12 views
5

Questa è una domanda molto soggettiva, quindi sarò più specifico. C'è un momento in cui un ciclo di do-while sarebbe uno stile di codifica migliore di un normale ciclo?Quando un ciclo do-while sarebbe il migliore di un ciclo?

ad es.

int count = 0; 
do { 
    System.out.println("Welcome to Java"); 
    count++; 
} while (count < 10);` 

Non sembra avere un senso per me per verificare le condizioni, mentre dopo aver valutato il fai-economico (aka forzando la dichiarazione fare per eseguire almeno una volta).

Per qualcosa di semplice come il mio esempio di cui sopra, mi immagino che:

int count = 0; 
while(count < 10) { 
    System.out.println("Welcome to Java"); count++; 
} 

sarebbe generalmente considerato essere stato scritto in una migliore stile di scrittura.

Qualcuno può fornirmi un esempio funzionante di quando un ciclo di attesa sarebbe considerato l'unica opzione/migliore? Hai un ciclo do-while nel tuo codice? Che ruolo gioca e perché hai optato per il ciclo do-while?

(ho un sentore sensazione che il ciclo do-while può essere utile nella codifica giochi. Mi corregga, gli sviluppatori di giochi, se sbaglio!)

+0

possibile duplicato [Perché utilizzare un ciclo "fai mentre"?] (Http://stackoverflow.com/questions/3003456/why-use-a-do-while-loop) –

+0

@StephenC davvero lo faccio! – AlexMTMorgan

risposta

3

Se si desidera leggere i dati da un socket di rete finché non si trova una sequenza di caratteri, è necessario prima di leggere i dati e quindi controllare i dati per la sequenza di escape.

do 
{ 
    // read data 
} while (/* data is not escape sequence */); 
0

Se la condizione di loop può essere conosciuta solo dopo un primo passo del ciclo (quando non si desidera una condizione prima di entrare nel ciclo). genere:

do { 
    expr = ...; 
while (expr); 
+0

Hai forse un esempio? – AlexMTMorgan

+1

Ad esempio richiesta di input dell'utente o di una fonte esterna. –

+1

C'è un esempio qui: http://stackoverflow.com/questions/3347001/do-while-vs-while –

1

Semplicemente, quando si desidera controllare condizioni prima e quindi eseguire l'operazione while è l'opzione migliore, e se si desidera eseguire l'operazione almeno una volta e quindi controllare la condizione do-while è meglio.
Come per la tua domanda un esempio di lavoro,
1. quando avevo bisogno di trovare lafield che potrebbe essere dichiarata nella stessa classe o la classe Super o la classe eccellente di quella classe super e così via cioè trovare il campo situato in una gerarchia di classi profonde. (A extends BB extends C e così via)

public Field SearchFieldInHierarchy(Object classObj, String fieldName) 
{ 
    Field type = null; 
    Class clz = classObj.getClass(); 
    do 
    { 
     try 
     { 
      type = clz.getDeclaredField(fieldName); 
      break; 
     } catch (NoSuchFieldException e) 
     { 
      clz = clz.getSuperclass(); 
     } 
    } while(clz != null || clz != Object.class);   
    return type; 
} 

2. Durante la lettura flusso di input da Http risposta

do 
    { 
     bytesRead = inputStream.read(buffer, totalBytesRead, buffer.length - totalBytesRead); 
     totalBytesRead += bytesRead; 
    } while (totalBytesRead < buffer.length && bytesRead != 0); 
+0

Qualsiasi motivo per il voto negativo ??? – dbw

0

Si tipo di rispondere alla domanda se stessi, quando è necessario eseguire almeno una volta, e ha senso leggerlo in questo modo.

1

Il ciclo di do-while è fondamentalmente una versione invertita del ciclo while.

Esegue le istruzioni del ciclo incondizionatamente la prima volta.

Quindi valuta l'espressione condizionale specificata prima di eseguire nuovamente le istruzioni.

int sum = 0; 
int i = 0; 
do 
{ 
    sum += ids[i]; 
    i++; 
} while (i < 4); 

Reference material

0

fare - ciclo while consente di garantire che il pezzo di codice viene eseguito almeno una volta prima che vada in l'iterazione.

0

In un ciclo while, la condizione viene testato prima di eseguire codice del ciclo. In un ciclo do while, il codice viene eseguito prima che la condizione venga verificata, con la conseguenza che il codice viene sempre eseguito almeno una volta. Esempio:

$value = 5; 

while($value > 10){ 
    echo "Value is greater than 10"; 
} 

Quanto sopra non emetterebbe mai nulla. Se lo facciamo di nuovo lo stesso in questo modo:

$value = 5; 

do{ 
    echo "Value is greater than 10"; 
}while($value > 10) 

Sarebbe uscita Value is greater than 10 perché la condizione viene verificata dopo che il ciclo viene eseguito. Dopo questo non uscirà nulla di più.

4

L'istruzione while esegue continuamente un blocco di istruzioni mentre una condizione particolare è vero

while (expression) { 
    statement(s) 
} 

do-while valuta la sua espressione nella parte inferiore del ciclo, e pertanto, le istruzioni all'interno del blocco do vengono sempre eseguite almeno una volta.

do { 
    statement(s) 
} while (expression); 

Ora parlerà differenza funzionale,

while-loops consistono di un'istruzioni di salto condizionali come if_icmpge o if_icmplt e una dichiarazione goto. L'istruzione condizionale dirama l'esecuzione all'istruzione immediatamente dopo il ciclo e quindi termina il ciclo se la condizione non viene soddisfatta. L'istruzione finale nel ciclo è un goto che dirotta il codice byte all'inizio del ciclo assicurando che il codice byte continui a scorrere fino a quando il ramo condizionale non viene soddisfatto.

Un Do-while-loops sono anche molto simili a for-loop e mentre-loops, tranne che non richiedono l'istruzione goto come il ramo condizionale è l'ultima istruzione ed è essere utilizzato per tornare all'inizio A do-while loop esegue sempre il corpo del loop almeno una volta: salta il controllo della condizione iniziale. Poiché salta il primo controllo, un ramo sarà meno e una condizione in meno da valutare.

Utilizzando do-while è possibile ottenere prestazioni se l'espressione/condizione è complessa, dal momento che è garantita a ciclo una sola volta.In tal caso do-while could call for performance gain

risultati molto impressionanti qui, http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html#while_loop

0

Utilizzare l'istruzione, mentre quando si controlla più volte e solo una condizione in cui la condizione è soddisfatta eseguire il ciclo

while(condition) //eg. a>5 
{ 
Body of Loop 
} 
  • Se vedi il flusso del controllo qui puoi vedere che la condizione è verificata prima dell'esecuzione del ciclo, se la condizione non è soddisfatta il ciclo non verrà eseguito per nulla

Nella dichiarazione Do-While il programma eseguirà il corpo del ciclo una volta e poi si verificherà se l'affermazione è vera o no

do 
    { 
Body of Loop 
} 

while(condition); //eg. a>5 
  • Se si nota il flusso di controllo qui vedrai che il corpo viene eseguito una volta, quindi la condizione viene controllata. Se la condizione è False, il Programma uscirà dal ciclo, se True continuerà ad essere eseguito fino a quando la condizione non sarà soddisfatta
  • Si noti che mentre e mentre rilasciano lo stesso output, solo il flusso di controllo è differente
1

/* While

5 dollari

1 cioccolato = 1 dollari

while my money is greater than 1 bucks 
    select chocolate 
    pay 1 bucks to the shopkeeper 
    money = money - 1 
end 

venire a casa e non posso andare a mentre negozio perché i miei soldi = 0 dollari */

#include<stdio.h> 
int main(){ 
    int money = 5; 

    while(money >= 1){ 
    printf("inside the shopk and selecting chocolate\n"); 
    printf("after selecting chocolate paying 1 bucks\n"); 
    money = money - 1 ; 
    printf("my remaining moeny = %d\n", money); 
    printf("\n\n"); 
    } 

    printf("dont have money cant go inside the shop, money = %d", money); 

    return 0; 
} 

denaro infinito

while(codition){ // condition will always true ....infinite loop 
    statement(s) 
} 

si prega di visitare questo video per una migliore comprensione https://www.youtube.com/watch?v=eqDv2wxDMJ8&t=25s