Обратный цикл for в java. Циклы for и while в Java

Java поддерживает три оператора перехода — break, continue и return. Они передают управление в другую часть вашей программы. Рассмотрим каждый из операторов подробно.

Цикл с предусловием — Цикл while C#

В данном случае действия цикла повторяются до тех пор, пока выполняется указанное условие. Этот цикл функционирует по принципу: «Сперва думаем, после делаем». В общем виде выглядит так:

while(<Условие>) { <Действия> }

Рассмотрим пример вычисления факториала при помощи while.

int n = (()); // Пользователь вводит число. int factorial = 1; int i = 2; while(i <= n) // Вычисление факториала. { factorial *= i; i++; // Увеличиваем счетчик. } (factorial); // Выводим факториал пользователю.

Чтобы не получить бесконечного цикла, необходимо изменять параметр, проверяемый в условии. Именно для этого мы увеличиваем i.

Цикл «for»

Более сложный, но при этом самый распространённый цикл — цикл for.

Выглядит он так:

for (начало; условие; шаг) { // … тело цикла … }

Давайте разберёмся, что означает каждая часть, на примере. Цикл ниже выполняет alert(i) для i от 0 до (но не включая) 3:

for (let i = 0; i < 3; i++) { // выведет 0, затем 1, затем 2 alert(i); }

Рассмотрим конструкцию for подробней:

часть
начало i = 0 Выполняется один раз при входе в цикл
условие i < 3 Проверяется перед каждой итерацией цикла. Если оно вычислится в false, цикл остановится.
шаг i++ Выполняется после тела цикла на каждой итерации перед проверкой условия.
тело alert(i) Выполняется снова и снова, пока условие вычисляется в true.

В целом, алгоритм работы цикла выглядит следующим образом:

Выполнить *начало* → (Если *условие* == true → Выполнить *тело*, Выполнить *шаг*) → (Если *условие* == true → Выполнить *тело*, Выполнить *шаг*) → (Если *условие* == true → Выполнить *тело*, Выполнить *шаг*) → …

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

Если тема циклов для вас нова, может быть полезным вернуться к примеру выше и воспроизвести его работу на листе бумаги, шаг за шагом.

Вот в точности то, что происходит в нашем случае:

// for (let i = 0; i < 3; i++) alert(i) // Выполнить начало let i = 0; // Если условие == true → Выполнить тело, Выполнить шаг if (i < 3) { alert(i); i++ } // Если условие == true → Выполнить тело, Выполнить шаг if (i < 3) { alert(i); i++ } // Если условие == true → Выполнить тело, Выполнить шаг if (i < 3) { alert(i); i++ } // , потому что теперь i == 3

Встроенное объявление переменной

В примере переменная счётчика i была объявлена прямо в цикле. Это так называемое «встроенное» объявление переменной. Такие переменные существуют только внутри цикла.

for (let i = 0; i < 3; i++) { alert(i); // 0, 1, 2 } alert(i); // ошибка, нет такой переменной

Вместо объявления новой переменной мы можем использовать уже существующую:

let i = 0; for (i = 0; i < 3; i++) { // используем существующую переменную alert(i); // 0, 1, 2 } alert(i); // 3, переменная доступна, т.к. была объявлена снаружи цикла

Пропуск частей «for»

Любая часть for может быть пропущена.

Для примера, мы можем пропустить начало если нам ничего не нужно делать перед стартом цикла.

Вот так:

let i = 0; // мы уже имеем объявленную i с присвоенным значением for (; i < 3; i++) { // нет необходимости в "начале" alert( i ); // 0, 1, 2 }

Можно убрать и шаг:

let i = 0; for (; i < 3;) { alert( i++ ); }

Это сделает цикл аналогичным while (i < 3).

А можно и вообще убрать всё, получив бесконечный цикл:

for (;;) { // будет выполняться вечно }

При этом сами точки с запятой ; обязательно должны присутствовать, иначе будет ошибка синтаксиса.

Оператор return

Последний оператор управления — return. Он используется для явного возврата из метода, т. е. передает программное управление обратно в вызывающую программу. Оператор return относят к категории операторов перехода. Хотя его полное обсуждение должно подождать до обсуждения методов, здесь представлен краткий обзор return.

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

// Демонстрирует return. public class Return {

public static void main(String[] args) { boolean t = true; (“Перед оператором return.”); if (t) { return; // возврат в вызывающую программу } (“Этот оператор никогда не выполнится.”); } }

Здесь return выполняет возврат к Java-системе во время выполнения, т. к. именно эта система вызывает метод main().

Вывод этой программы:

Перед оператором return.

Можно заметить, что заключительный оператор println() не выполняется. В момент выполнения return управление передается обратно в вызывающую программу.

И последнее замечание. В предыдущей программе оператор if (t) необходим. Без него Java-компилятор выдал бы ошибку “недостижимый код”, потому что он знал бы, что последний оператор println() никогда не будет выполняться. Чтобы предотвратить указанную ошибку, как раз и используется оператор if (t)он обманывает компилятор ради данной демонстрации.

Цикл While

Цикл while имеет самый простой синтаксис. Вспомните if -инструкцию, которую мы изучали чуть ранее. В условное выражение оператора if (то, что заключено в скобочки после слова if ) можно поместить практически любую комбинацию операторов и переменных. Если выражение будет истинным (true ), то код, заключенный в тело блока if будет выполнен. Аналогичным образом в цикле while мы помещаем выражение, которое может вычисляться в true или false , как показано в этом коде:

Int x = 10; while(x > 0){ x—; //x уменьшается на один каждый проход цикла }

Что здесь происходит? Первым делом за пределами цикла while мы объявили переменную x типа int и присвоили этой переменной значение “10”. Далее начинается цикл while , в условии которого написано “ x > 0” – это означает, что код, написанный в теле цикла while будет выполняться до тех пор, пока переменная x больше 0 и условие не достигнет значения false . Следовательно, код выполнится 10 раз(x=10,x>0 ; x=9,x>0 ; x=8,x>0 ; x=7,x>0 ; x=6,x>0 ; x=5,x>0 ; x=4,x>0 ; x=3,x>0 ; x=2,x>0 ; x=1,x>0). В первый проход цикла x = 10 , во второй уже 9 , в третий 8 и т.д. И когда x будет равен 0 , то условие захода в цикл не выполнится, и программа продолжится со следующей строки после окончания цикла.

Также, как и в операторе if , возможна такая ситуация, при которой цикл не будет выполнен ни разу. Взгляните на следующий пример:

Int x = 10; while(x > 10){ //какой-нибудь код //но он никогда не выполнится, пока x больше 10 }

Кроме того, нет ограничений на сложность выражения условия или объем кода, который может быть записан в теле цикла:

Int playerLives = 3; int alienShips = 10; while(playerLives >0 && alienShips >0){ //Весь игровой код здесь //… //… // и т.д. } //программа продолжится здесь, когда или playerLives или alienShips = 0

Этот цикл будет выполняться до тех пор, пока либо переменная playerLives , либо alienShips не станут равны или меньше нуля. Как только одно из этих условий наступит, выражение в условии примет значение false и программа продолжится со следующей строки после завершения цикла.

Стоит отметить, что как только программа входит в тело цикла, он будет выполнен, даже если условие цикла станет false , где-нибудь в теле цикла, т.к. условие проверяется только при входе:

Int x = 1; while(x > 0){ x—; //x теперь равен 0 и условие в следующий раз примет значение false //Но эта строка выполнится //И эта //И даже эта }

В примере выше тело цикла выполнится один раз. Помимо этого, можно установить такое условие, что цикл будет выполняться вечно – это называется бесконечный цикл. Вот пример:

Int x = 0; while(true){ x++; //Я буду становиться очень большим! }

Читайте также:  Samsung Kies — как пользоваться, где скачать