Разгадка тайны множественных циклов в программировании: изучение сходства циклов While, For и Do…While
Долгое время я задавался вопросом… почему в программировании существуют два вида циклов… и эта статья как раз об этом. Если вам интересно, подождите — их три — отдайте должное… пока тоже, тогда подождите, пока я тоже доберусь до этого.
Всякий раз, когда вы пытаетесь найти ответ на вопрос, зачем нужны два (или более) типа циклов…
Наиболее типичный ответ, который вы можете получить: →
Когда мы знаем количество итераций, мы используем цикл for; когда мы этого не делаем, мы используем цикл while.
Но давайте копнем глубже!
Цикл while
Синтаксис цикла while, который мы изучили до сих пор, таков:
while(condition){ //code }
Если нам нужно напечатать числа от 1 до 5, мы должны сделать что-то вроде:
В правой части мы видим, что код выдает от 1 до 5, разделенных символом EOL.
Используя цикл while, мы также можем создать бесконечный цикл следующим образом:
Цикл for
Синтаксис цикла for, который мы изучили до сих пор, таков:
for(initialization; condition; increment){ //code }
Давайте рассмотрим пример цикла for для печати чисел от 1 до 5.
Справа мы видим, что это производит вывод с номерами от 1 до 5.
Давайте инициализируем переменную перед блоком цикла и увеличим ее в конце цикла.
Этот цикл for по-прежнему производит аналогичный вывод, но теперь он больше похож на цикл while.
Мы также можем увидеть цикл for, например
for(statement1; condition; statement2){ //code }
Здесь оператор 1 — это любой оператор, который выполняется один раз перед первой итерацией, а оператор 2 — это любой оператор, который выполняется один раз после каждой итерации.
Чтобы доказать это, напечатаем что-нибудь вместо обоих этих утверждений.
В выводе мы видим, что I печатается один раз, а E печатается в конце каждой итерации.
Теперь, когда мы это знаем, мы можем даже использовать циклы for для создания бесконечных циклов.
Цикл do…while
Я сказал, что расскажу и о циклах do…while, так что давайте начнем обсуждение.
Говорят, что циклы do…while проверяют свои условия в нижней части цикла, в отличие от циклов for и while, которые проверяют свои условия в верхней части цикла. Это звучит как-то по-другому, но на самом деле... циклы while — это просто циклы while, которые выполняются хотя бы один раз, независимо от того, выполняется условие или нет.
Синтаксис цикла do…while такой:
do { //code }while(condition);
Любой такой цикл do…while может быть реализован как:
bool firstIteration = true; while(condition || firstIteration){ firstIteration = false; //code }
Различия
До сих пор мы делали вывод, что все, что мы можем сделать с помощью цикла while, можно реализовать с помощью цикла for. Возникает один вопрос: была ли когда-нибудь необходимость создавать более одного вида петли.
Когда вы ищете в Интернете и пытаетесь найти ответ, вот что вы получаете →
«Цикл for обычно используется, когда вы точно знаете, сколько раз вы хотите пройти через определенный раздел кода. Диапазон целых чисел, который вы вводите в поля начального значения заголовка, конечного значения и значения шага (при необходимости), автоматически повторяется циклом for.
С другой стороны, цикл while обычно используется, когда вы не уверены, сколько раз вы хотите пройти через определенный раздел кода. Пока условие, которое вы указываете в заголовке цикла, истинно, цикл будет продолжать работать».
Хотя мы уже видели, как мы можем использовать циклы for для перебора определенного участка кода, где количество элементов неизвестно, давайте посмотрим, как мы можем использовать цикл while для перебора массива.
Чтобы решить такую задачу, как «По заданному двумерному массиву целых чисел найдите сумму всех элементов массива». мы будем использовать циклы for, как показано ниже:
Давайте теперь воспользуемся циклами while и посмотрим, получим ли мы по-прежнему аналогичный результат.
Здесь я изменил циклы for
//code int sum = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { sum += arr[i][j]; } } //code
в циклы while следующим образом:
//code int sum = 0, i = 0; while (i < 3) { int j = 0; while (j < 3) { sum += arr[i][j]; j++; } i++; } //code
что привело к аналогичному результату. Теперь мы еще больше уверены, что различий нет, а значит… циклы for и while можно заменять когда угодно и где угодно. Им суждено быть вместе. Пока будешь рядом и ибо будешь рядом, и в том-то и дело, милый мой!
Если я получу хороший ответ на этот пост, я также подробно расскажу о циклах while и for в python!
Не стесняйтесь связаться со мной на моем LinkedIn.