Знакомство с циклами в Java – учебник с примерами

Повторяющееся исполнение набора инструкций называется циклом. Циклы в Java делятся на три типа:

  1. While;
  2. For;
  3. Do While
  • Выше перечислено три различных типа циклов, которые используются с одинаковой целью, и отличаются только синтаксисом;
  • Из-за синтаксических различий может отличаться и их образ действия. Вскоре мы рассмотрим данные различия.

Java-цикл For и его разные типы

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

Существует два типа цикла for:

  1. Обычный цикл for;
  2. Вложенный for.

Обычный цикл for

Синтаксис:

for(initialization; condition; incr/decr){----------}
  • Когда элемент управления натыкается на цикл for, он сначала выполняет инициализацию. Эта часть выполняется один раз;
  • Далее контроллер переходит к разделу с условиями. Если оценка условий выдает результат true, то контроллер переходит к телу цикла.

Если оценка даёт результат false, то элемент управления выходит из for и выполняет условие, следующее после цикла.

Когда условие даёт значение true, выполняется тело цикла. Далее контроллер переходит к разделу incr/decr. Здесь указываются переменные инкремента или декремента.

После выполнения раздела incr/decr, контроллер переходит к разделу условий. Если результат будет true, то выполняется тело цикла. Далее переход к разделу incr/decr, а потом к разделу условий. Этот процесс будет повторяться до тех пор, пока оценка условий будет равно true.

как написать цикл на Java:

for(int a=1; a<=3; a++){System.out.println(“drink more water”);}

В приведённом выше примере переменная инициализируется значением 1.

Это действие происходит всего один раз. После чего контроллер переходит к условию a:

class example{ public static void main(String arg[]) { int i; for(i=1;i<=3;i++)    {          System.out.print("hello world");         }       }}

Результат:

hello worldhello worldhello world

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

То есть:

for(int len=1;len<=max; len++){Some statements;}

int x=len; — не валидна, поскольку len освободилась; int len=p; — валидна, поскольку рассматривается в виде новой переменной.

Пример:

class ForLoopBasics4{public static void main(String args[]){for(int i=1;i<=5;i++)   {     System.out.println(i);   }}}

Результат:

12345

Пример программы:

class ForLoopBasics5{public static void main(String args[]){for(int i=1;i<=5;i++)   {    System.out.println(i);  //1 2 3 4 5}   System.out.println(i);//error for unknown variable i }

Результат:

error: cannot find symbol System.out.print(i);                                                                                                                                                                             ^

Описание:

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

Пример 2:

class ForLoopBasics6{public static void main(String args[]){int i;for( i=1;i<=5;i++)   {    System.out.println(i);  //1 2 3 4 5}   System.out.println(i);  //6}

Результат :

1 23456

Описание :

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

  1. В теле цикла в Java может быть любое число инструкций;
  2. Все они должны быть заключены в фигурные скобки;
  3. Если в теле цикла есть только одна инструкция, то фигурные скобки необязательны.

Пример 1 :

for(double b=2.3; b<=10; b+=1.2){System.out.print(b);System.out.print(10-b);}

Пример 2 :

for(int c=’A’; c<=’Z’; c++){System.out.print(“ “+(char)c);}

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

По окончании инициализации этот раздел завершается точкой с запятой. В следующем примере вложенного цикла Java мы поместили в раздел инициализации три инструкции, разделенные запятыми: (a=10) , (b=20) и (c=30) .

Пример :

for(a=10, b=20, c=30; a+b <= c ;  a++){StatementA;}

Пример программы :

class ForLoopBasics9{public static void main(String args[]){ int a,b,c;          for(a=10, b=20, c=33;  a+b <= c ;  a++)    { System.out.println(true);    } }}

Результат :

truetruetrue
  • Подобно разделу с инициализацией, в разделе incr/decr также может быть пару инструкций, указанных через запятую.

Пример :

for(a=1,b=5; a<=b; a+=2, b++){statementA;}

Пример программы :

class ForLoopBasics10{public static void main(String args[]){ int a,b,c;         for(a=1,b=5; a<=b; a+=2, b++)    {System.out.println(a +"<="+ b);             }       } }

Результат :

1<= 5 3<= 6 5<= 7 7<= 8 9<= 9

Но в разделе условий цикла в Java ничего не отделяется запятыми. Все предполагаемые условия должны комбинироваться с помощью операторов AND или OR и образовывать единое условие.

Пример :

<b>for (a=2; a for(int a=9; a<=b; a++){}

Пример программы :

class ForLoopBasics11{public static void main(String args[]){ int a,b,c,n=10;            a=0;          b=1;          System.out.print(a+" "+b+" ");           for(int i=2;i<n;i++)    {               c=a+b;               a=b;               b=c;       System.out.print(c+" ");             }       } }

Результат :

0 1 1 2 3 5 8 13 21 34

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

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

Пример :

for(int a=11; a<=b; a++){statementA;for(int x=12; x<=y; x++){statementB;}statementC;}

В данном примере контроллер доходит до раздела инициализации за пределами цикла.

Объяснение приведённого выше примера :

Значением a = 11 . Далее контроллер переходит к разделу условий. Если условие выдаёт значение true , контроллер переходит к телу цикла и выполняет statementA .

Далее контроллер переходит к разделу инициализации внутреннего цикла, а после этого – к разделу условий.

Если условия выполняется, программа переходит к телу цикла и выполняет statementB . После этого контроллер переходит к разделу с увеличением значения во внутреннем цикле for , а после – к разделу условий внутреннего цикла. Вложенный цикл Java повторяется до тех пор, пока внутреннее условие выдаёт значение true .

Пример программы :

class NestedForLoop{    public static void main(String args[])    {         int i,j;        for(i=1;i<=3;i++)          {             System.out.println(i+"iteration");                    for(j=1;j<=3;j++)                    {                         System.out.println(j);           }                  }    }}

Результат :

iteration1 1 2 3 iteration2 1 2 3 iteration3 1 2 3

Внутрь иного цикла в Java for можно поместить любую конструкцию. Здесь нет ограничения по числу конструкций.

Пример :

Чтобы выйти из цикла for в середине тела, можно легко использовать оператор break . Он выведет контроллер из цикла, независимо от условий в объявлении цикла.

Пример :

for(a=16; a<=i; a+=3){------if(condition)break;------}

Если мы хотим перейти к следующей итерации цикла с середины тела (пропустив оставшиеся инструкции текущей итерации), можно легко использовать оператор continue .

Пример :

for(a=17; a<=j; a*=2){------if(condition)continue;------}

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

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

Пример 1 :

int a=1;for( ; a<=3; a++)statementA;

Пример 2 :

for(int a=1; a<=3; ){statementA;a++;}

Пример 3 :

for(int a=1; ; a++){if(a>3)break;statementA;}

Если мы запишем цикл for как for(;;) , и в нём не будет break или return , то это бесконечный цикл Java . Приведенные ниже циклы являются бесконечными.

Пример 1: for( ; ; ) Пример 2: for(init; true; incr)

Цикл for в стиле foreach

Синтаксис :

for(variable : collection){----------}

Определение :

Этот тип циклов используется для перехода по набору элементов в строгом порядке (от начала к концу). Набором элементов может быть массив, ArrayList , LinkedList или любая другая коллекция.

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

Пример :

int a[]={10,20,30,40};for(int i=0; i<a.length; i++){System.out.println(a[i]);}

В этом примере цикл повторяется четыре раза (число элементов в массиве), и каждый раз отображается очередной элемент i (от 0 до 3).

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

Пример :

int a[]={10,20,30,40};for(int x : a)System.out.println(x);

В данном случае переменная x получает каждое значение из массива (по одному значению на итерацию), а далее отображается. Этот подход (foreach) подходит для обслуживания всех элементов в списке. Если нам нужны отдельные фрагменты списка, то можно без проблем использовать обычный цикл в Java .

Пример :

ArrayList<Integer> al=new ArrayList<Integer>();al.add(10); al.add(20); al.add(30); al.add(40);for(int x : al){System.out.println(x);}

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

int a[][]={{1,2,3,4},{5,6,7,8},{9,8,7,6}};for(int curArr[] : a)for(int curEle : curArr)System.out.print(curEle+" ");

В приведённом выше примере внешний цикл в Java проходит по массиву ссылок (где каждая ссылка обращается к массиву), а внутренний цикл проходит по каждому элементу текущего массива.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *