Управление потоком Java: операторы while и do-while

Введение Условные операторы и циклы - очень важный инструмент в программировании. Есть немного вещей, которые мы могли бы сделать с кодом, который может выполняться только построчно. Вот что означает «управление потоком» - руководство выполнением нашей программы вместо того, чтобы позволить ей выполняться построчно, независимо от каких-либо внутренних или внешних факторов. Каждый язык программирования поддерживает ту или иную форму управления потоком, если не явно через ifs, fors или аналогичные операторы - тогда он неявно дает нам инструменты для

Вступление

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

Вот что означает «управление потоком» - руководство выполнением нашей программы вместо того, чтобы позволить ей выполняться построчно, независимо от каких-либо внутренних или внешних факторов. Каждый язык программирования поддерживает некоторую форму управления потоком, если не явно через if s и for s или аналогичные операторы - тогда он неявно дает нам инструменты для создания таких конструкций, то есть языки программирования низкого уровня обычно достигают этого эффекта с большим go-to командам.

Циклы были концепцией, которая использовалась задолго до того, как компьютерное программирование стало вообще чем-то, но первой, кто использовал программный цикл, была Ада Лавлейс, широко известная под своей девичьей фамилией - Байрон, при вычислении чисел Бернулли еще в 19 веке.

В Java есть несколько способов управления потоком кода:

пока

Цикл - это набор инструкций, которые повторно выполняются до тех пор, пока не будет выполнено какое-либо условие, или, альтернативно, пока условие true . В while цикл в Java работает на последнем принципе, повторяет блок кода, пока условие принимает значение true :

 while(condition) { 
 // Block of code to be executed 
 } 

Когда Java встречает while цикл он делает следующее:

  • Это condition верно?
    • Да -> выполнить блок кода. Еще раз проверьте состояние.
    • Нет -> не выполнять блок кода. Не проверяйте состояние снова.

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

condition может быть Boolean выражение любого типа, такое же, как с операторами if

Поскольку while проверяет condition перед выполнением любого кода, возможно, что блок кода в цикле while никогда не будет выполнен, если condition было false в начале.

Это отличается от for , который обычно выполняется заданное количество раз. while циклы, с другой стороны, часто используются для выполнения неизвестного количества раз.

Вот пример в while цикл , который суммирует все цифры в int .

 int n = 123; 
 int sumOfDigits = 0; 
 
 while(n > 0) { 
 int lastDigit = n % 10; // Retrieves the last digit of n via the modulus operator 
 n = n / 10; // "Removes" the last digit from n via division 
 
 sumOfDigits += lastDigit; // Adds the current digit to the sum 
 } 
 
 System.out.println(sumOfDigits); 

Выполнение этого кода работает следующим образом:

  • Условие while проверяется, n равно 123, а sumOfDigits равно 0. Является ли n > 0 равным true ? Да -> выполнить код в цикле.
  • Условие while проверено, n равно 12, а sumOfDigits равно 3. Является ли n > 0 равным true ? Да -> выполнить код в цикле.
  • В то время как условие проверяется, n = 1 и sumOfDigits 5. Является ли n > 0 , равных true ? Да -> выполнить код в цикле.
  • В то время как условие проверяется, n = 0 и sumOfDigits равно 6. Является ли n > 0 , равных true ? Нет -> выполнить первую строку после цикла, в нашем случае распечатать результат.

После трехкратного выполнения цикла while на консоль выводится значение 6.

Тело цикла while может быть пустым, и иногда разработчикам нравится писать сокращенные while когда это возможно. Кроме того, то же правило сокращения if и else применяется к while . Таким образом , одной линии в while цикл может быть переписан без скобок, например:

 // This... 
 while(i < j) { 
 System.out.println("i " + i++ + " j " + j--); 
 } 
 
 // ...becomes this: 
 while(i < j) 
 System.out.println("i " + i++ + " j " + j--); 

Также обратите внимание, что переменные, используемые в проверяемом условии, могут быть изменены либо внутри while либо внутри самого проверенного условия:

 while(++i < --j) 
 System.out.println("i " + i + " j " + j); 

Оба из них приводят к одному и тому же результату:

 i 1 j 9 
 i 2 j 8 
 i 3 j 7 
 i 4 j 6 

Однако они могут снизить удобочитаемость, и в этом случае их следует избегать.

делать пока

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

Это потому, что, в отличие от while , код выполняется до проверки условия. Таким образом, даже если мы начнем с false условия, он выполнит код, а затем проверит, следует ли сделать это снова:

 int i = 0; 
 
 // This will print once 
 do { 
 System.out.println(i); 
 i--; 
 } while(i > 0); 

Вывод кода:

 0 

Когда код достигает while(i > 0) , он останавливает итерации.

Например, один из вариантов использования do-while - спросить пользователя, хотят ли они попробовать что-то еще раз в случае неудачи.

 do { 
 // Try to connect to a server, access a resource, etc... 
 String status = connectToServer(); 
 
 // Ask user whether they want to try again 
 String userInput = getUserInput("Connection status is " + status + ". Want to try again?"); 
 } while(userInput == "yes"); 

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

Заключение

Управление потоком в коде необходимо абсолютно для каждого приложения. Заявления, которые изменяют поток кода, являются фундаментальными строительными блоками, и каждый начинающий разработчик должен полностью контролировать / осознавать, как они работают.

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

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus