Рубрики
Без рубрики

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

Автор оригинала: 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-в то время как циклы хороши для выполнения блока кода неизвестное количество раз, где условие проверяется каждый раз, когда блок кода запускается повторно.