• Циклы в java. Бесконечный for (Java) цикл

    Последнее обновление: 31.10.2018

    Еще одним видом управляющих конструкций являются циклы. Циклы позволяют в зависимости от определенных условий выполнять определенное действие множество раз. В языке Java есть следующие виды циклов:

    Цикл for

    Цикл for имеет следующее формальное определение:

    For ([инициализация счетчика]; [условие]; [изменение счетчика]) { // действия }

    Рассмотрим стандартный цикл for:

    For (int i = 1; i < 9; i++){ System.out.printf("Квадрат числа %d равен %d \n", i, i * i); }

    Первая часть объявления цикла - int i = 1 создает и инициализирует счетчик i. Счетчик необязательно должен представлять тип int . Это может быть и любой другой числовой тип, например, float. Перед выполнением цикла значение счетчика будет равно 1. В данном случае это то же самое, что и объявление переменной.

    Вторая часть - условие, при котором будет выполняться цикл. В данном случае цикл будет выполняться, пока i не достигнет 9.

    И третья часть - приращение счетчика на единицу. Опять же нам необязательно увеличивать на единицу. Можно уменьшать: i-- .

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

    Нам необязательно указывать все условия при объявлении цикла. Например, мы можем написать так:

    Int i = 1; for (; ;){ System.out.printf("Квадрат числа %d равен %d \n", i, i * i); }

    Определение цикла осталось тем же, только теперь блоки в определении у нас пустые: for (; ;) . Теперь нет инициализированной переменной-счетчика, нет условия, поэтому цикл будет работать вечно - бесконечный цикл.

    Либо можно опустить ряд блоков:

    Int i = 1; for (; i<9;){ System.out.printf("Квадрат числа %d равен %d \n", i, i * i); i++; }

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

    Цикл for может определять сразу несколько переменных и управлять ими:

    Int n = 10; for(int i=0, j = n - 1; i < j; i++, j--){ System.out.println(i * j); }

    Цикл do

    Цикл do сначала выполняет код цикла, а потом проверяет условие в инструкции while. И пока это условие истинно, цикл повторяется. Например:

    Int j = 7; do{ System.out.println(j); j--; } while (j > 0);

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

    Int j = -1; do{ System.out.println(j); j--; } while (j > 0);

    Хотя переменная j изначально меньше 0, цикл все равно один раз выполнится.

    Цикл while

    Цикл while сразу проверяет истинность некоторого условия, и если условие истинно, то код цикла выполняется:

    Int j = 6; while (j > 0){ System.out.println(j); j--; }

    Операторы continue и break

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

    Например:

    < nums.length; i++){ if (nums[i] > 10) break; System.out.println(nums[i]); }

    Так как в цикле идет проверка, больше ли элемент массива 10, то мы не увидим на консоли последние два элемента, так как когда nums[i] окажется больше 10 (то есть равно 12), сработает оператор break, и цикл завершится.

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

    Int nums = new int { 1, 2, 3, 4, 12, 9 }; for (int i = 0; i < nums.length; i++){ if (nums[i] > 10) continue; System.out.println(nums[i]); }

    В этом случае, когда выполнение цикла дойдет до числа 12, которое не удовлетворяет условию проверки, то программа просто пропустит это число и перейдет к следующему элементу массива.

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

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

    Первый способ объявить цикл — это использовать такую конструкцию: for (условие начала цикла; условие конца; шаг, с которым будет идти цикл) { тело цикла }

    Перейдем сразу к примерам. Допустим у нас есть задача вывести фразу «привет мир» 10 раз. Если не использовать циклы, то можно просто написать System.out.println(«Привет мир»); десять раз и решим задачу. Давайте же для это цели используем циклы. Создайте новый класс и назовите его например CuclesInJava. Теперь объявите условие цикла (пусть это будет 0), условие конца — 10, и шаг. Будем идти с шагом в единицу. В тело цикла поместите строку System.out.println(«Привет мир»);

    Вот пример кода:

    Результатом такого кода будет 10 строк подряд фразы «Hello world!».

    Как насчет написать что то более сложное. Мы уже выучили и базовые . Давайте их и используем.

    Напишем простое приложение, которое будет выводить строку с оповещением каждый раз, когда шаг + некоторая переменная будет равна 5. У меня очень плохо с фантазией))

    Для начала напишем код, который будет принимать на вход переменную введенную из консоли. В предыдущей статье, я давал пример этого кода и мы условились, что потом я объясню, как он работает и откуда пошел. А сейчас мы просто будем им пользоваться:

    Далее нужно написать цикл, который будет начинаться с нуля и считать до десяти (как в предыдущем примере). В тело цикла запишем условный оператор, который будет проверять, является эта переменная равна 5 и если это так, то будем выводить строку «ОК». Вот, что у меня получилось:

      import java.util.Scanner ;

      public class CuclesInJava {

      int variable = scanner.nextInt () ; //мы дойдем до этого постепенно и тогда будет понятно, как это работает

      for (int i = 1 ; i < 10 ; i++ ) {

      int newVariable = i + variable;

      if (newVariable== 5) {

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

    Следующим способом объявить циклы является конструкция: while(условие истинно){блок кода, который нужно выполнить}. У данной конструкции есть другая форма:

    do{блок кода, который нужно выполнить}while(условие истинно). Отличие первого от второго в том, что второе выполнить один цикл независимо истинно условие или нет. Можете сами подумать: сначала мы выполняем кода, а потом уже проверяем условие. И даже если условие будет не истинным, код все равно выполниться один раз, в том время, когда в первом виде конструкции сначала проверяется условие и пока оно не будет истинным, код не выполнится.

    Код должен быть интуитивно понятен. Думаю, стоит упомянуть, что с помощью конструкций while и do-while можно «зациклить» программу если не прописать или неправильно прописать условие выхода из цикла. Посмотрите на пример выше и подумайте, что было, если бы я написал не i—, а i++; или вместо i>0, i<0. Моя программа никогда не вышла бы из цикла и продолжала бы выводить строку Hello world! до тех пор, пока не завис компьютер. Поэтому, будьте очень осторожными с циклами и всегда следите, чтобы из них Ваша программа могла выйти или закончить работу.

    Ну и пример с do-while:

    На этом, думаю, можно закончить статью о циклах в Java . Как видите, конструкции не очень сложны, но очень полезны. Особенно полезными они будут, когда мы познакомимся с массивами и строками.

    Как в практически любом языке программирования, в Java имеются инструменты, предназначенные для многократного повторения определенного фрагмента кода. Такие инструменты принято называть циклами. В Java циклы представлены такими операторами, как while и for, а также их разновидностями. Циклы, как правило, используются для прохода по одномерным и многомерным массивам и структурам данных для нахождения определенны элементов и дальнейших операций с ними. Но это далеко не единственный способ применения такого инструмента, как цикл Java. По мере их рассмотрения будут приводиться примеры использования.

    Цикл while Java: описание и примеры

    While является основополагающим оператором цикла в Java. Заключенный в его теле фрагмент кода будет повторяться до тех пор, пока условие выражения, заключенного в скобки после него, будет удовлетворять истинному значению. Оператор while в общем виде имеет следующий вид: while (условие){//тело цикла}. Как только значение логического условия перестанет быть истинным, код, заключенный в тело цикла, перестанет выполняться. Управление передастся строке, которая идет сразу после него. Если в теле цикла заключен всего один оператор, то можно не ставить фигурные скобки. Однако, среди программистов считается хорошим тоном всегда ставить их. Давайте разберем пример:

    Public class whileDemo (

    System.out.println (“Printing Numbers from 1 to 10”);

    while (count<=10) {

    System.out.println(count);

    Изначально объявленная переменная count имеет значение 1. Далее мы видим логическое выражение, которое заключено в скобки после названия оператора. Если значение будет истинным, то цикл будет возвращать значение true до тех пор, пока значение переменной countне будет равно или меньше 10.С каждым проходом или итерацией значение переменной будет увеличиваться на 1 и выводится на консольный экран. Когда значение переменной достигло значения 11, цикл завершил работу. Если бы значение переменной count равнялось изначально 11, то тогда условие цикла было бы ложным. Программа даже не зашла бы в тело. Необходимо отметить, что синтаксис Java дает возможность использовать оператор While без тела. Рассмотрим следующий пример. Предположим, у вас есть две переменные: i=100 иj=200. Перед нами стоит задача вычислить программным путем их среднее арифметическое значение, для этой цели можно использовать «пустотелый» цикл while:

    While (++i<- — j);

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

    Цикл do-while

    В предыдущих примерах если выражение условия возвращало значение false, то программа игнорировала тело цикла и продолжала дальнейшее выполнение. Но иногда возникают ситуации, когда выполнение кода, который содержится в теле цикла обязательно хотя бы один раз вне зависимости от истинности выражения условия. Иначе говоря, иногда бывает так, что необходимо проверять истинность условного выражения в начале, а не в конце цикла. Подобную функциональность может обеспечить разновидность цикла while с условным названием do-while. Он имеет такую форму: do {// тело цикла} while (условие). Как вы можете убедиться, сначала здесь идет выполнение тела цикла, а потом проверяется истинность условия. Так делается на каждой итерации. Приведенный выше код отработает примерно так же, как и в случае с while. Но если бы мы присвоили переменной count значение 11, тело цикла все равно выполнилось бы один раз, прежде чем оператор смог бы проверить истинность выражения.

    Примеры и описание: for – Java цикл

    Цикл for является универсальной и эффективной языковой формой в языке Java. Вплоть до пятой версии JavaSDK существовала только одна традиционная форма оператора for. После нее появилась новая – foreach. В этом разделе речь пойдет о традиционной форме оператора. Циклforвjava имеетследующийвид:

    for (inti=0; i<10; i++) {//Loop statements to be executed

    Прежде чем управление передастся коду в конце цикла, выполняется инициализация переменной i, которая выступает в качестве счетчика. Далее необходимо проверить условное выражение, в котором счетчик сравнивался с определенным значением. Если программа возвращает true, тело цикла выполняется. При этом значение счетчика меняется на заданный заранее шаг и снова проверяется условное выражение. Так происходит до тех пор, пока условие не станет ложным. Для лучшего понимания приведем пример того, как работает цикл for Java.

    public class ForLoops {

    public static void main (String args) {

    intend_value =11;

    for ; //создаем массив типа “что-то” из 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 берёт на себя управление инициализацией, проверкой условия и изменением переменной. Испробуем на практике в нашем приложении данный цикл сразу же после того, как ознакомимся со случайными числами и методами.