2013-12-09 3 views
5

Это очень субъективный вопрос, поэтому я буду более конкретным. Есть ли время, когда цикл do-while будет лучшим стилем кодирования, чем обычный цикл while?Когда цикл do-while будет лучше, чем цикл while?

например.

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

Это, кажется, не имеет смысла для меня, чтобы проверить состояние а после оценки делать-заявление (он же принуждая заявление сделать, чтобы запустить по крайней мере один раз).

Для чего-то простого, как мой выше примере, я предположил бы, что:

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

будет в целом считается, что было написано в лучшем стиле письма.

Может ли кто-нибудь предоставить мне рабочий пример, когда цикл do-while будет считаться единственным/лучшим вариантом? У вас есть цикл do-while в коде? Какую роль он играет и почему вы выбрали цикл do-while?

(у меня есть подозрение, ощущение, что цикл делать-то время могут быть использованы при кодировании игр. Поправьте меня, разработчики игр, если я не прав!)

+0

возможно дубликата [Зачем использовать цикл «do while»?] (Http://stackoverflow.com/questions/3003456/why-use-a-do-while-loop) –

+0

@StephenC действительно я делаю! – AlexMTMorgan

ответ

3

Если вы хотите прочитать данные из сетевого сокета до тех пор, пока последовательность символов не будет найдена, вам сначала нужно будет прочитать данные, а затем проверить данные для escape-последовательности.

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

Если зацикливание условие может быть известно только после первого шага цикла (когда вам не нужно условие, прежде чем вводить цикл). правило:

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

Возможно, у вас есть пример? – AlexMTMorgan

+1

Например, запрашивая ввод пользователя или какой-либо внешний источник. –

+1

Здесь есть пример: http://stackoverflow.com/questions/3347001/do-while-vs-while –

1

Просто, когда вы хотите, чтобы проверить состояние до, а затем выполнить операцию while лучше вариант, и если вы хотите выполнить операцию по крайней мере один раз, а затем проверить состояние do-while лучше.
По вашему вопросу рабочий пример,
1. когда я нуждался в найти field, которые могут быть объявлены в одном классе или суперкласс или суперкласс этого суперкласса и так далее т.е. нахождение поля расположенный в иерархии глубоких классов. (A extends BB extends C и так далее)

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. При чтении входного потока из Http ответа

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

Любые причины проголосовать ??? – dbw

0

Вы отчасти ответить на вопрос самостоятельно, когда он должен работать по крайней мере один раз, и имеет смысл читать его таким образом.

1

Цикл do-while представляет собой, в основном, инвертированную версию цикла while.

Он безоговорочно выполняет инструкции цикла в первый раз.

Затем он вычисляет условное выражение, указанное перед выполнением операторов снова.

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

Reference material

0

сделать - в то время как петля позволяет гарантировать, что часть кода выполняется по крайней мере один раз, прежде чем он идет в итерации.

0

В while цикле, условие проверяется перед выполнением кода в цикле. В цикле do while код выполняется до проверки условия, в результате код всегда выполняется хотя бы один раз. Пример:

$value = 5; 

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

Вышеизложенное никогда не выводит ничего. Если мы делаем то же самое снова, как это:

$value = 5; 

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

Было бы выход Value is greater than 10, потому что условие проверяется после того, как цикл выполняется. После этого он ничего не выводит.

0

Разница между do-while и while заключается в том, что do-while оценивает свое выражение в нижней части цикла вместо вершины. Поэтому инструкции внутри блока do всегда выполняются хотя бы один раз.

Например проверит эту ссылку: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html

4

while оператор непрерывно выполняет блок операторов, а конкретное условие истинно

while (expression) { 
    statement(s) 
} 

do-while оценивает свое выражение в нижней части петли, и поэтому инструкции в блоке do всегда выполняются хотя бы один раз.

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

Теперь поговорим о функциональной разницы,

while-loops состоят из команд условного перехода, такие как if_icmpge или if_icmplt и Гото заявление. Условная инструкция передает выполнение инструкции сразу после цикла и, следовательно, завершает цикл, если условие не выполняется. Окончательная команда в цикле - это goto, которая возвращает байтовый код обратно в начало цикла, гарантируя, что байтовый код продолжает цикл, пока не будет выполнена условная ветвь.

Do-while-loops также очень похож на-петель и в то время как-петля кроме того, что они не требуют инструкции Гота, как условный переход является последней командой и используются для цикла назад к началу Сделайте в то время как цикл всегда запускает тело цикла хотя бы один раз - он пропускает проверку начального условия. Поскольку он пропускает первую проверку, одна ветвь будет меньше и еще одно условие для оценки.

С помощью do-while вы можете получить производительность, если выражение/условие является сложным, так как оно обеспечивается как минимум один раз.В этом случае do-while could call for performance gain

Очень впечатляющие результаты здесь, http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html#while_loop

0

Используйте то пока, когда вы должны проверить состояние несколько раз и только тогда, когда условие выполнения Петля

while(condition) //eg. a>5 
{ 
Body of Loop 
} 
  • Если вы видите поток управления здесь, вы можете видеть, что условие проверяется перед выполнением цикла, если условие не выполняется, цикл не будет выполняться вообще

В Do-While заявлении программа будет выполнять тело цикла один раз, а затем он будет проверять, если утверждение верно или нет

do 
    { 
Body of Loop 
} 

while(condition); //eg. a>5 
  • Если вы заметили поток управления здесь вы увидите, что тело выполняется один раз, тогда условие проверяется. Если условие False, программа выйдет из цикла, если True продолжит выполнение до тех пор, пока условие не будет выполнено.
  • Следует отметить, что while и do-while дают тот же результат, что и поток управления отличается
1

/* во время цикла

5 баксов

1 шоколад = 1 бакса

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

пришел домой и не можешь пойти в то время как магазин, потому что мои деньги = 0 баксов */

#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; 
} 

бесконечны деньги

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

посетите видео для лучшего понимания https://www.youtube.com/watch?v=eqDv2wxDMJ8&t=25s

Смежные вопросы