когда использовать цикл while, а не цикл - PullRequest
6 голосов
/ 15 июля 2011

Я изучаю Java, а также Android. Почти все, что мы можем выполнить с помощью цикла while, это то, что мы можем сделать в цикле for.

Я нашел простое условие, когда использование цикла while лучше, чем для цикла

если мне нужно использовать значение counter в моей программе, тогда я думаю, что цикл лучше, чем цикл

Использование цикла while

int counter = 0;
while (counter < 10) {
    //do some task
    if(some condition){
        break;
    }
}
useTheCounter(counter); // method which use that value of counter do some other task

В этом случае я обнаружил, что цикл while лучше, чем цикл for, потому что если я хочу добиться того же цикла for, мне нужно присвоить значение counter другой переменной.

Но есть ли конкретная ситуация, когда цикл while лучше, чем для цикла

Ответы [ 12 ]

14 голосов
/ 15 июля 2011
Цикл

A for - это просто особый вид цикла while, который имеет дело с приращением переменной. Вы можете эмулировать цикл for с циклом while на любом языке. Это просто синтаксический сахар (кроме python, где for на самом деле foreach). Так что нет, нет конкретной ситуации, когда одно лучше другого (хотя по причинам читабельности вы предпочитаете цикл for, когда выполняете простые инкрементные циклы, так как большинство людей могут легко сказать, что происходит).

Ибо может вести себя как:

while(true)
{
}

for(;;)
{
}

А пока может вести себя как:

int x = 0;
while(x < 10)
{
    x++;
}

for(x = 0; x < 10; x++)
{
}

В вашем случае, да, вы можете переписать его как цикл for, как это:

int counter; // need to declare it here so useTheCounter can see it

for(counter = 0; counter < 10 && !some_condition; )
{
    //do some task
}

useTheCounter(counter);
13 голосов
/ 15 июля 2011

Одно основное отличие состоит в том, что while циклы лучше всего подходят, когда вы заранее не знаете, сколько итераций вам нужно сделать. Когда вы знаете это перед входом в цикл, вы можете использовать цикл for.

5 голосов
/ 15 июля 2011

for и while эквивалентны, просто другой синтаксис для одной и той же вещи.


Вы можете преобразовать это

while( condition ) {
   statement;
}

в это:

for( ; condition ; ) {
    statement;
}

Другой способ:

for( init; condition; update) {
    statement;
}

эквивалентен этому:

init;
while(condition) {
    statement;
    update;
}

Итак, просто используйте то, что выглядит лучше или легче говорить.

3 голосов
/ 09 февраля 2019

Используйте цикл FOR, когда вы знаете, сколько раз вы хотите выполнить цикл.Технический термин для этого - количество итераций.Как узнать количество итераций?Вы знаете начало, остановку и шаг.Если вы знаете эти три фрагмента информации, вам следует использовать цикл FOR, потому что это правильный инструмент для работы.
Используйте цикл DO, если вы не знаете количество итераций.Если вы не знаете начала, остановки, шага или какой-либо их комбинации, вам нужно использовать цикл DO.Выражение будет оцениваться в верхней части цикла.Используйте цикл DO WHILE, если хотите сделать цикл хотя бы один раз.Используйте только цикл WHILE, если вы не хотите делать цикл хотя бы один раз.Выражение будет оцениваться в нижней части цикла.

3 голосов
/ 15 июля 2011

Помните,

Все, что делается с помощью цикла for, можно сделать с помощью цикла while, НО не все циклы while могут быть реализованы с помощью цикла for.

WHILE:

While-loops используются, когда условие выхода не имеет ничего общего с числом циклов или управляющей переменной

ЗА:

for-loops - это просто краткий способ написания цикла while, в то время как оператор инициализации, оператор управления (когда останавливаться) и оператор итерации (что делать с управляющим фактором после каждой итерации ).

Например,

По сути, циклы for - это просто короткие стрелки для циклов while, любой цикл for можно преобразовать из:

for([initialize]; [control statement]; [iteration]) {
   // ...
  }

и

[initialize]; 
while([control statement]) { 
   //Do something [iteration];
   } 

одинаковы.

2 голосов
/ 15 июля 2011

Цикл while обычно лучше, если у вас нет итератора (обычно счетчик).

2 голосов
/ 15 июля 2011

for конечно, в том смысле, что он завершит цикл, когда у него закончатся элементы для цикла ....

while может быть бесконечным, если условие не выполнено или нарушен цикл

Редактировать

Моя ошибка ... for может быть бесконечной ..

1 голос
/ 15 июля 2011

Нет.Не существует конкретной ситуации, когда for лучше, чем while.
Они делают то же самое.
Вам решать, когда применить один из них.

1 голос
/ 15 июля 2011

Вы можете сделать что-то вроде:

int counter;
for (counter = 0; counter < 10; ) {
    //do some task
    if(some condition){
        break;
    }
}
useTheCounter(counter);

Все, что может сделать цикл while, также может быть выполнено в цикле for, и все, что может сделать цикл for, также может быть выполненово время цикла.

1 голос
/ 15 июля 2011

Одна вещь, на которую я должен обратить внимание: когда вы используете цикл for, вам не нужно присваивать счетчик другой переменной. Например, for(counter=0; counter<10; counter++) - допустимый код Java.

Что касается вашего вопроса, цикл for обычно лучше, когда вы хотите, чтобы фрагмент кода выполнялся определенное количество раз, и цикл while лучше, когда условие для продолжения выполнения кода носит более общий характер, например имеющий логический флаг, который устанавливается в true только тогда, когда определенное условие выполняется в блоке кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...