Знакомство с циклами в 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 world
hello world
hello 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);
	   }
	}
}

Результат:

1
2
3
4
5

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

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 
2
3
4
5
6

Описание:

В программе, приведенной выше, ошибки не возникает, так как в ней используется переменная 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);
	    }
 	}
}

Результат:

true
true
true
  • Подобно разделу с инициализацией, в разделе 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 проходит по массиву ссылок (где каждая ссылка обращается к массиву), а внутренний цикл проходит по каждому элементу текущего массива.

Перевод статьи “What Are Java Loops – Definition & Explanation” был подготовлен дружной командой проекта Сайтостроение от А до Я.

Java  |  01.11.2017  | 

Java, Программирование, похожие статьи

В этой статье мы разберемся с тем, почему нужно переопределить метод toString для отображения содержимого ArrayList.
Java  |  14.12.2017
Каждый класс в Java является дочерним классом для класса Object. Класс Object содержит метод toString(). Он используется для получения строкового представления объекта. Каждый раз, когда мы пытаемся вывести ссылку на Object, вызывается метод toString().
Java  |  14.12.2017
Цикл Java While Do – это инструкция, позволяющая запускать один и тот же фрагмент кода несколько раз. Этот цикл можно использовать для повторения действий при соответствии условий.
Java  |  21.10.2017




Яндекс цитирования