Автор оригинала: Olivera Popović.
Вступление
Условные операторы и циклы являются очень важным инструментом в программировании. Существует не так много вещей, которые мы могли бы сделать с кодом, который может выполняться только построчно.
Вот что означает “управление потоком” – руководство выполнением нашей программы, вместо того, чтобы позволять ей выполняться построчно независимо от каких-либо внутренних или внешних факторов. Каждый язык программирования поддерживает ту или иную форму управления потоком, если не явно с помощью if
s и для
s или аналогичных операторов – тогда он неявно предоставляет нам инструменты для создания таких конструкций, т. Е. Языки программирования низкого уровня обычно достигают того, что влияет на множество команд go-to
.
Циклы были концепцией, используемой задолго до того, как компьютерное программирование вообще стало чем – то, но первым человеком , использовавшим программный цикл, была Ада Лавлейс, широко известная под своей девичьей фамилией Байрон, при вычислении чисел Бернулли , еще в 19 веке.
В Java существует несколько способов управления потоком кода:
- утверждения if и if-else
- операторы переключения
- операторы while и do-while
- для и улучшено для заявлений
- прервите и продолжите выступления
пока
Цикл-это набор инструкций, которые многократно выполняются до тех пор, пока не будет выполнено какое-либо условие, или, альтернативно, до тех пор, пока условие истинно
. Цикл в то время как
в Java работает по последнему принципу, он повторяет блок кода до тех пор, пока условие оценивается как true
:
while(condition) { // Block of code to be executed }
Когда Java сталкивается с циклом while
, он выполняет следующее:
Верно ли
условие
?- Да -> выполнить блок кода. Проверьте состояние еще раз.
- Нет -> не выполняйте блок кода. Не проверяйте состояние снова.
Это означает , что если бы у нас было утверждение типа while(true)
, блок кода выполнялся бы бесконечно (или, по крайней мере, пытался бы). Это называется бесконечным циклом , и его следует избегать, если у нас нет способа выйти из цикла – обычно с помощью оператора break
.
Условие | может быть любым типом
логического выражения, таким же, как и в операторах
if .
Поскольку while
проверяет условие
перед выполнением любого кода, возможно, что блок кода в цикле 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, асумма Цифр
равна 0. Является лиn > 0
равнымистинным
? Да -> выполните код в цикле. - Условие while проверено,
n
равно 12 исумма Цифр
равна 3.n > 0
равноtrue
? Да -> выполните код в цикле. - Условие while проверено,
n
равно 1 исумма Цифр
равна 5.n > 0
равноtrue
? Да -> выполните код в цикле. - Условие while проверено,
n
равно 0 исумма Цифр
равна 6.n > 0
равноtrue
? Нет -> выполните первую строку после цикла, в нашем случае распечатайте результат.
После выполнения цикла while 3 раза на консоль выводится значение 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
loops, либо в самом проверяемом условии:
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
, но он гарантирует, что блок кода будет выполнен по крайней мере один раз .
Это связано с тем, что , в отличие от в то время как
, код выполняется до проверки условия. Поэтому, даже если мы начнем с условия false
, он выполнит код, а затем проверит, следует ли ему делать это снова:
int i = 0; // This will print once do { System.out.println(i); i--; } while(i > 0);
Вывод кода выглядит следующим образом:
0
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
После того , как код достигнет 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
, но таким образом это более читабельно и интуитивно понятно.
Вывод
Управление потоком в коде необходимо абсолютно для каждого приложения. Заявления, которые изменяют поток кода, являются фундаментальными строительными блоками, и каждый начинающий разработчик должен полностью контролировать/осознавать, как они работают.
в то время как
и do-в то время как
циклы хороши для выполнения блока кода неизвестное количество раз, где условие проверяется каждый раз, когда блок кода запускается повторно.