Цикл - это блок команд, который выполняется снова и снова, пока соблюдается определённое условие. Повторяемый фрагмент кода называют «телом цикла». Одно выполнение тела цикла называют итерацией.

В Яве можно работать с циклами нескольких типов - для этого есть следующие операторы:

while – цикл с предусловием – сначала проверяем условие, затем выполняем тело цикла;

do… while – цикл с постусловием – сначала выполняем один раз тело цикла, затем проверяем условие и, если оно соблюдается, продолжаем;

for – цикл со счётчиком – выполняется и при каждой итерации обновляет счётчик, пока условие в объявлении цикла соблюдается (т.е. проверка условия возвращает true);

сокращенный for (в других языках известен как foreach) – перебирает массив от первого элемента до последнего и на каждой итерации выполняет тело цикла.

Суть условия цикла – проверка выражения с одной или несколькими переменными: «Пока a<11, в каждой итерации выполняем тело цикла и увеличиваем "а" на 1». Но чему равно «а» при первом выполнении цикла?

Если мы используем конструкции с while, значение нужно указать перед началом цикла:

int a = 1;

while (a < 11) {

System.out.println(a);

a++; //увеличиваем а на единицу

}

Если же переменная работает как счётчик цикла, а за его пределами не используется, её инициализируют прямо в условии. И тут же пишут, что с ней делать в конце каждой итерации. Всё это – в одну строку – с помощью for:

for (а=1, a<11, i++) {

System.out.println(a);

}

Получаем тот же результат. Список можно было начать с нуля или с отрицательного значения – диапазон определяем сами.

Сокращенный вариант цикла for не содержит указаний ни на число повторов, ни на действия в конце шага. Цикл типа foreach используют для перебора массивов. От первого элемента нужно переходить к следующему – пока массив не кончится.

int ms = { 1, 2, 3, 4}; //создаем массив

int s = 0;

for(int i: ms) { //указываем, что перебирать

s *= i; //последовательно перемножаем элементы

}

System.out.println(s);

Вложенные циклы Java

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

Выведем таблицу умножения с помощью двух массивов:

int a, b, result = 0;

for (a = 2; a < 10; a++) {

for (b = 2; b < 10; b++) {

result = a*b;

System.out.println(a+"x"+b+" = "+result);

}

}

Cоздание объектов в цикле Java

Циклы удобны, когда нужно создать и пронумеровать множество объектов. Их число бывает неизвестно заранее: объекты могут создаваться по запросу пользователя. Вот мы спросили, сколько нужно чего-то, и записали число в переменную n. Теперь создадим объекты в нужном количестве:

Something array = new Something[n]; //создаем массив типа “что-то” из n элементов

for(int i = 0; i < n; i++){

array[i] = new Something(); //создаем “что-то” и помещаем его в массив

}

Как выйти из цикла Java

Для выхода из цикла есть ключевые слова break - «прервать», continue - «возобновить» и return - «вернуться». Команда break переключает программу на выполнение следующих за циклом операторов. Условия прерывания цикла в Java оформляют через if-ветвление. Главное, чтобы проверка выполнялась перед основной частью тела цикла.

//после создания массива m пишем:

for (a: m) {

if (a==5) break;

System.out.println(a);

}

Операторы ветвления и цикла в Java часто работают вместе: запускаем цикл, а внутри него проверяем, не выполнено ли еще условие, при котором нужно прервать цикл или сделать что-то ещё.

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

Для досрочного прерывания итерации цикла for в Java используют continue. Когда программа до него доходит, она пропускает невыполненную часть итерации, обновляет счётчик и переходит к следующей итерации.

В конструкциях while тот же continue работает иначе: возвращает нас к проверке условия продолжения цикла. Другая команда – return – возвращает программу к месту, откуда был вызван метод, в котором цикл находится.

И continue, и break можно использовать с меткой - для перехода к нужной части кода - по аналогии с goto:

break Mark1; //при условии, что где-то выше стоит метка Mark1:

Бесконечный цикл Java

Создать бесконечный цикл легко - достаточно не указывать параметры в for:

for (; ;) {}

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

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

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

Затем мы кратко рассмотрим тему случайных чисел (random numbers ). Посмотрим на Java -класс Random и как он нам может помочь в нашей игре.

Цикл как следует из названия – это способ выполнения одной и той же части кода необходимое количество раз (при этом результат выполнения кода в цикле необязательно будет повторяться). Количество повторений выполнения цикла может быть, как определенно заранее, так и быть неизвестным самому программисту. Мы рассмотрим основные типы циклов, которыми нам предлагает воспользоваться язык Java. А после внедрим некоторые из них в нашу игру тем самым усовершенствовав её.

Цикл 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++; //Я буду становиться очень большим! }

Выход их цикла. Ключевое слово break

А вдруг нам действительно понадобится воспользоваться бесконечным циклом, но так чтобы мы могли решить в какой момент из него выйти. Для этой цели в Java существует ключевое слово break . Мы можем использовать break , когда нам нужно будет «выйти» из цикла:

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

Наверняка вы уже догадались о том, что возможно сочетать различные инструменты принятия решений, такие как if, else, switch внутри нашего цикла while и других циклах, которые рассмотрим чуть ниже. К примеру:

Int x = 0; int tooBig = 10; while(true){ x++; //Я буду становиться очень большим! if(x == tooBig){ break; //Нет, не будешь. } //код здесь будет доступен до тех пор пока x не станет равен 10 }

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

Ключевое слово continue

continue действует почти так же, как и break . Ключевое слово continue выкинет вас из тела цикла, но затем проверит выражение условия, а не продолжит с места после закрывающейся фигурной скобки цикла, как это случилось бы в случае с break . В следующем примере показано использование continue :

Int x = 0; int tooBig = 10; int tooBigToPrint = 5; while(true){ x++; //Я буду становиться очень большим! if(x == tooBig){ break; } //Нет, не будешь. //код здесь будет доступен только пока x не станет равен 10 if(x >= tooBigToPrint){ //больше не будет выводиться на экран, но цикл будет продолжаться continue; } //код здесь будет доступен пока x не станет равен 5 //код для вывода x на экран }

Пояснение: объявляем и инициализируем переменные. Заходим в цикл — прибавляем к значению переменной x единицу (теперь x = 1). Проверка «1 равно 10?» — false — первый оператор if не выполняется. Следующая проверка «1 больше или равен 5?» — false — второй оператор if не выполняется. Выводим x на экран.

Рассмотрим вариант, когда x будет принимать значение 5 при входе в цикл. Заходим в цикл — прибавляем к значению переменной x единицу (теперь x = 6). Проверка «6 равно 10?» — false — первый оператор if не выполняется. Следующая проверка «6 больше или равен 5?» — true — заходим в тело if continue , выходим из цикла и проверяем условие входа в цикл.

Теперь вариант, когда x будет принимать значение 9 при входе в цикл. Заходим в цикл — прибавляем к значению переменной x единицу (теперь x = 10). Проверка «10 равно 10?» — true — заходим в тело if break , выходим из цикла и код продолжится за закрывающейся фигурной скобкой цикла while .

Цикл do-while

Почти тоже самое, что и предыдущий цикл за исключением одной особенности – проверка выполнения условного выражения будет происходить после тела цикла. Это означает, что цикл do- while всегда будет выполняться хотя бы один раз. Взгляните на пример:

Int x = 0; do { x++; } while(x < 10); //x теперь = 10

Ключевые слова break, continue

Цикл for

Цикл for имеет более сложный синтаксис, чем while и do- while , поскольку для его инициализации требуется немного больше манипуляций. Давайте сначала взглянем на него и потом разберём по частям:

For(int i = 0; i < 10; i++){ //Что-то, что должно произойти 10 раз будет записано здесь }

Как это видит компилятор? Вот так:

For(объявление и инициализация; условие; изменить после каждого прохождения цикла){ // тело цикла }

  • Объявление и инициализация – мы создали новую переменную типа int с именем i и присвоили ей значение 0 ;
  • Условие – подобно другим рассмотренным ранее циклам, тут мы проверяем условие вхождения в цикл. Если значение вычисляется как true , то входим в тело цикла;
  • Изменить после каждого прохождения цикла – в примере выше i ++ означает то, что после очередного прохода цикла мы к значению переменной i добавляем единицу (1). Более того, мы можем в изменении переменной написать и i , чтобы отнимать единицу, например:
for(int i = 10; i > 0; i--){ //обратный отсчет } //ключ на старт, i = 0

Ключевые слова break, continue также можно использовать в данном цикле.

Цикл for берёт на себя управление инициализацией, проверкой условия и изменением переменной. Испробуем на практике в нашем приложении данный цикл сразу же после того, как ознакомимся со случайными числами и методами.

Рассмотрим 2 цикла: do-while и for.

Скачать исходники для статьи можно ниже

Цикл do-while

Цикл do-while всегда выполняет свое тело по крайней мере один раз, потому что его условное выражение размещается в конце цикла. Общая форма цикла:

Do { // тело цикла } while (condition);

Каждая итерация цикла do-while сначала выполняет тело цикла, а затем оценивает условное выражение. Если это выражение - true, цикл повторится. Иначе цикл заканчивается. Как и у всех Java-циклов, condition должно быть булевским выражением.
Ниже показана программы с “тиками”, которая демонстрирует цикл do-while.

// Демонстрирует do-while цикл. public class DoWhile { public static void main(String args) { int n = 10; do { System.out.println("тик " + n); n - -; } while (n > 0); } }

Вывод программы:
тик 10
тик 9
тик 8
тик 7
тик 6
тик 5
тик 4
тик 3
тик 2
тик 1

Цикл, for

Общая форма цикла for:

For (initialization; condition; iteration) statement;

Если повторяется только один оператор, фигурные скобки не нужны.
Цикл for работает следующим образом. В начале работы цикла выполняется выражение initialization. В общем случае это выражение устанавливает значение переменной управления циклом, которая действует как счетчик. Важно понять, что выражение инициализации выполняется только один раз. Затем оценивается condition. Оно должно быть булевским выражением и обычно сравнивает переменную управления циклом с некоторым граничным значением. Если это выражение - true, то отрабатывают операторы из тела цикла, если - false, цикл заканчивается. Далее выполняется часть цикла iteration. Обычно это выражение, которое осуществляет инкрементные или декрементные операции с переменной управления циклом. Затем цикл реализовывает итерации. В каждом проходе цикла - сначала оценивается условное выражение, потом выполняется тело цикла и затем - выражение iteration. Этот процесс повторяется до тех пор, пока управляющее выражение не станет false.

Ниже приводится программа вывода “тиков”, которая использует цикл for:

// Демонстрирует for-цикл. public class ForTick { public static void main(String args) { int n; for (n = 10; n >

Вывод программы:
тик 10
тик 9
тик 8
тик 7
тик 6
тик 5
тик 4
тик 3
тик 2
тик 1

Объявление переменных управления внутри цикла for.
Часто переменная, которая управляет циклом for, необходима только для целей цикла и не используется в другом месте. Когда дело обстоит так, можно объявить переменную внутри инициализационной части for. Например, предшествующая программа перекодирована так, чтобы переменная управления циклом n объявлялась типом int внутри заголовка for:

// Определение переменной управления циклом внутри for. public class ForTick { public static void main(String args) { // здесь n объявлена внутри заголовка for-цикла for (int n = 10; n > 0; n - -) { System.out.println("тик " + n); } } }

Когда переменная объявляется внутри заголовка for-цикла, важно помнить, что область ее действия заканчивается там же, где и у for-оператора (т. е. область действия переменной ограничена циклом for). Вне цикла for переменная прекратит существование. Если нужно использовать управляющую переменную цикла в другом месте программы, ее не следует объявлять внутри цикла for.
Когда управляющая переменная цикла не нужна где-то в другом месте, большинство Java-программистов объявляет ее внутри for-заголовка. Ниже показана небольшая программа, которая проверяет, является ли число простым (Простым называется число, которое делится только на собственное значение и на 1 (например, простыми являются числа 1, 2, 3, 5, 7, 11, 13 и т. д.). Обратите внимание, что управляющая переменная цикла i объявлена внутри for-заголовка, т. к. она нигде больше не нужна.

// Проверка на принадлежность к категории простых чисел. public class FindPrim { public static void main(String args) { { int num; boolean isPrime = true; num = 14; for (int i = 2; i < num / 2; i++) { if ((num % i) == 0) { isPrime = false; break; } } if (isPrime) { System.out.println("Простое число"); } else { System.out.println("Число не является простым"); } } } }

Использование запятой
Может возникнуть желание включить более одного оператора в инициализационную и итерационную части цикла for. Например, рассмотрим цикл следующей программы:

Public class Sample { public static void main(String args) { int a, b; b = 4; for (a = 1; a < b; a++) { System.out.println("a = " + a); System.out.println("b = " + b); b - -; } } }

He трудно заметить, что цикл зависит от взаимодействия двух переменных. Так как цикл управляется двумя переменными, было бы полезно включить их непосредственно в заголовок оператора for вместо того, чтобы обрабатывать переменную вручную. К счастью, в Java обеспечена такая возможность. Чтобы позволить двум или большему числу переменных управлять циклом for, Java разрешает вам включать множественные операторы как в инициализационную, так и в итерационную части for-заголовка. Каждый оператор отделяется от следующего запятой.
Используя запятую, предыдущий цикл for можно закодировать более эффективно:

// Использование запятой. public class Comma { public static void main(String args) { int a, b; for (a = 1, b = 4; a < b; a++, b - -) { System.out.println("а = " + a); System.out.println("b = " + b); } } }

В этом примере инициализационная часть устанавливает значения как для а, так и для b. Два разделенных запятыми оператора в итерационной части выполняются каждый раз, когда цикл повторяется. Программа генерирует следующий вывод:
а = 1
b = 4
а = 2
b = 3

Замечание. В Java запятая - это разделитель, который применяется только в цикле for.

Подобно всем другим языкам программирования Java допускает вложение циклов. То есть один цикл может быть внутри другого. Например, следующая программа вкладывает for-циклы:

// Циклы могут быть вложенными. public class Nested { public static void main(String args) { int i, j; for (i = 0; i < 5; i++) { for (j = i; j < 5; j++) { System.out.print("."); } System.out.println(); } } }

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

..
.

Приведем более внятный пример этой программы:

Public class NestedArray { public static void main(String args) { int i, j; for (i = 0; i < 5; i++) { for (j = i; j < 5; j++) { System.out.println("i = " + i + ",j = " + j); } } } }

Вывод этой программы
i = 0,j = 0
i = 0,j = 1
i = 0,j = 2
i = 0,j = 3
i = 0,j = 4
i = 1,j = 1
i = 1,j = 2
i = 1,j = 3
i = 1,j = 4
i = 2,j = 2
i = 2,j = 3
i = 2,j = 4
i = 3,j = 3
i = 3,j = 4
i = 4,j = 4

В этом примере более наглядно видно, что на каждый вывод i, приходится 5 выводов j.

Вы задумывались когда-нибудь над тем, зачем вообще существуют программы? Если упростить и обобщить ответ на этот вопрос, то выяснится, что программы необходимы для автоматизации рабочего процесса, увеличения скорости выполняемой работы, избавления человека от тысяч монотонных действий и так далее. Давайте остановимся на повторяющихся друг за другом действиях, или говоря простым языком циклах.

Цикл – это последовательное выполнение повторяющихся действий на основе заданного предусловия. Например, нужно переставить сто ящиков из одного угла в другой. Если это каким-то образом записать на языке Java (к сожалению, переставить за вас ящики Java не сможет), то получится запись в сто строк:

1. взять ящик №1 и поставить в другой угол;
2. взять ящик №2 и поставить в другой угол;
3. взять ящик №3 и поставить в другой угол;

100. взять ящик №100 и поставить в другой угол;

Сто строк кода – это уже много, но бывает тысяча, две, три и так далее. Для этих целей, а именно – упрощения записи повторяющихся действий и служат циклы.

Существует три оператора представляющих циклы в языке Java – это while, do/white и for. Каждый из операторов необходим в своей ситуации, но все же чаще всего используется оператор for. Рассмотрим по порядку каждый из операторов.

Оператор while

Синтаксическая запись оператора while выглядит следующим образом:

While(условие) { // действия }

Так же имеет место выполнение определенного предусловия, но в отличие от оператора if/else, данная конструкция построена на циклах проверки условия. Когда программа доходит до оператора while, если предложенное условие истинно, происходит выполнение всех действий в блоке из фигурных скобок {…}. После выполнения этих действий, программа снова делает очередную проверку условия после оператора while и если условие опять истинно, происходит повторное выполнение действий в блоке. Действия в блоке выполняются до тех пор, пока условие не станет ложным и только тогда происходит выход из цикла while.
Для выхода из циклов чаще всего используются так называемые счетчики. Рассмотрим не большой пример:

Int i = 0; while (i < 10) { // действия i++; }

Сначала переменной i присваивается значение 0, далее происходит проверка условия i0)

{ // действия i--; }

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

Boolean i = true; while (i) { // действия }

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

Напоследок хочу еще обратить ваше внимание на оператор равно ==. Если записать цикл таким образом:

Int i = 0 while (i == 5) { // действия i++; }

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

Int i = 0 while (i = 5) { // действия i++; }

В предусловии происходит присвоение переменной i значения 5, а это действие не запрещено и что мы имеем в итоге? Начнется выполнение этого блока цикла в конце которого значение i увеличится на один, но в предусловии после оператора while, переменной i новь будет присвоено значение пять и цикл продолжит свою работу до бесконечности. Это пример простого бесконечного цикла и как следствие, классическая ошибка, случающаяся очень часто с начинающими программистами.

Цикл do/while

Только что рассмотренный нами цикл while, при определенных условиях может и не заработать. Например, если условие будет изначально ложно, то цикл не выполнится ни разу. Программа, дойдя до строки кода с оператором while, проверит условие и если оно будет равно false, проигнорирует весь цикл и перейдет к коду, следующему сразу за циклом while. Но иногда возникает необходимость в выполнении цикла по крайней мере один раз. Для этих целей в Java существует цикл do/while. Запись и создание цикла do/while осуществляется следующим образом:

Do { // действия }while (условие)

Между операторами do и while существует тело цикла, которое будет выполняться до тех пор, пока постусловие, следующее за оператором while, не будет ложно. Тело цикла выполнится, по меньшей мере, один раз, после чего будет произведена проверка условия. Цикл do/while используется не часто, но порой оказывается незаменим.

Цикл for

Это самый распространенный цикл в программировании. Работа цикла for основан на управлении счетчиком. Смысл работы этого цикла схож с рассмотренными выше циклами while и do/while. Посмотрите как выглядит синтаксическая запись цикла for:

For (int i = 0; i < 10; i++) { // действие }

После ключевого слова for, следует условие выполнения цикла. Само же условие объединяет в себе три этапа. Сначала следует инициализация счетчика i = 0, затем проверка условия i < 10 и в конце увеличение переменной i на единицу.

Работает цикл for следующим образом. Когда программа доходит до цикла, то происходит инициализация счетчика i = 0 и проверяется условие i < 10. Далее программа переходит в тело цикла. По окончанию всех действий в цикле for, происходит обращение к третьему этапу цикла: i++, увеличивая счетчик на единицу. После чего сразу же происходит переход ко второму этапу – проверке переменной i < 10 и повторный выход в тело цикла. Весь цикл продолжается до тех пор, пока условие i < 10 не станет ложным. Цикл for используется постоянно при инициализации массива данных, где без него очень сложно, а порой и не возможно обойтись. Так же как и в цикле while возможно использование оператора декремента, например.

12.08.17 1.9K

Цикл Java While Do – это инструкция, позволяющая запускать один и тот же фрагмент кода несколько раз. Этот цикл можно использовать для повторения действий при соответствии условий.

Цикл While

Цикл while является самым простым для построения на языке Java . Он состоит из ключа while , условия loop , а также тела цикла:

while (condition) { // loop body }

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

Итерации цикла что-то меняют, и в определенный момент оценка условий возвращает false , после чего цикл завершается. Цикл, условие которого никогда не возвращает false , исполняется бесконечное количество раз. Такие циклы называются бесконечными.

Пример

int num = 0; while (num < 10) { System.out.println(num); num++; }

Этот пример выводит числа от 0 до 9 . Давайте пошагово пройдёмся по коду. Сначала мы инициализируем переменную num со значением равным 0 . Это будет счётчик цикла. Когда программа доходит до while , производится оценка выполнения условий цикла. В нашем случае 0 < 10 возвращает значение true и исполняется тело цикла. Внутри цикла выводится переменная num , а затем увеличивается на 1 . На этом завершается первая итерация.

После первого «прогона » условие цикла While Java оценивается во второй раз. 1 < 10 по-прежнему возвращает true , после чего запускается следующая итерация цикла. Один и тот же процесс повторяется несколько раз.

Завершающая итерация начинается, когда значение num равняется 9 . Счётчик цикла выводится в последний раз, и значение увеличивается до 10 . На этот раз новая итерация не может быть запущена, так как условие цикла выдаёт значение false . Так как 10 не меньше 10 .

Таким образом, цикл запускается до тех пор, пока условием цикла выполняется. Вооружившись этим знанием, можно создавать более сложные и функциональные циклы. Давайте проведёт итерацию с массивом:

String names = {"Doc", "Dopey", "Bashful", "Grumpy", "Sneezy", "Sleepy", "Happy"}; int index = 0; while (index < names.length) { System.out.println(names); index++; }

Концепция этого примера схожа с предыдущим. Мы инициализируем счётчик цикла и запускаем итерацию по массиву до тех пор, пока выводятся все элементы. В результате, итерация по массивам – довольно распространённый случай, и в Java для этого есть более подходящая конструкция – цикл For .

Цикл do-while

Цикл Java while do похож на while , но имеет существенное отличие: в отличие от while , здесь условие проверяется по окончании каждой итерации. Это значит, что цикл do-while всегда исполняется хотя бы один раз:

do { // loop body } while (condition);

Пример

do-while сначала исполняет тело цикла, а затем оценивает его условия. В зависимости от полученного результата цикл останавливается или запускается следующая итерация. Давайте рассмотрим простую игру «угадай имя »:

Scanner scanner = new Scanner(System.in); String guess; do { System.out.print("Угадай имя: "); guess = scanner.nextLine(); } while (!"Daffy Duck".equals(guess)); System.out.println("Поздравляю! Ты угадал моё имя!");

В этом while Java примере используется Scanner для парсинга ввода из system.ini . Это стандартный канал ввода, который в большинстве случаев взаимодействует с клавиатурой. Проще говоря, мы просто читаем текст, который вводит игрок.

В игре необходимо спросить пользователя хотя бы раз, и делать это до тех пор, пока игрок вводит правильные ответы. Цикл do-while идеально подходит для таких случаев. В теле цикла мы получаем пользовательское значение, а затем проводится проверка правильности ответа. Цикл должен запускаться до тех пор, пока вводимое пользователем значение не становится равным Daffy Duck . Если правильный ответ получен, цикл останавливается, и мы поздравляем игрока с победой.

В завершение

Циклы while true Java позволяют использовать фрагменты кода несколько раз. Сегодня мы познакомились с циклами Java while и do-while . Они похожи тем, что проверяют условия и исполняют тело цикла, если по результатам оценки условия получено значение true . Но при этом у них есть существенное отличие: условие цикла while проверяется до итерации, а условие цикла do-while – по окончании каждой итерации. Это значит, что цикл do-while всегда исполняется как минимум один раз.

Данная публикация представляет собой перевод статьи «Java’s While and Do-While Loops in Five Minutes » , подготовленной дружной командой проекта