Java. Урок 15. Циклы for и while

Уроки для начинающих   17 января 2013  Автор статьи:  

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

int a = 3 * 3 * 3 * 3;

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

int a = 1;
a *= 3;
a *= 3;
a *= 3;
a *= 3;

Теперь мы явно видим строчку, которая повторяется четыре раза. Очевидно, что, если бы умели выполнять некоторое действие n-раз, то мы могли упростить решение нашей задачи.

int a = 1;
Цикл a *= 3;

Существует два вида цикла: for и while. Цикл for пробегает некоторый ряд значений, например с 0 до 4, или с буквы a до буквы z. Очевидно, что для того, чтобы задать такой ряд, необходимо указать начальное значение, приращение данного значения и условие, при котором мы достигнем конца ряда. В синтаксисе java оператор for выглядит так:

for(блокИнициализации;блокУсловия;блокПриращения) оператор;

Если вы хотите пустить цикл от 0 до 4 не включительно, то вы можете написать следующий код:

for(int i = 0; i < 4; i++)

Оператор в данном случае выполнится четыре раза, что нам и нужно было при решении предыдущий задачи:

int a = 1;
for(int i = 0; i < 4; i++) a *= 3;

Можно обобщить задачу, и возводить любое число b, в любую степень n:

int a = 1;
for(int i = 0; i < n; i++) a *= b;

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

  • Присваиваем переменной a значение 1
  • Заходим в цикл
  • Выполняется инициализация переменной i
  • Переменной i присваивается 0
  • Выполняется проверка условия
  • 0 < 4 следовательно условие истинно
  • Выполняется оператор
  • Значение переменной a увеличивается в 3 раза
  • Выполняется приращение переменной цикла
  • Переменная i увеличивается на 1
  • Выполняется проверка условия
  • 1 < 4 следовательно условие истинно
  • Выполняется оператор
  • Значение переменной a увеличивается в 3 раза
  • Выполняется приращение переменной цикла
  • Переменная i увеличивается на 1
  • Выполняется проверка условия
  • 2 < 4 следовательно условие истинно
  • Выполняется оператор
  • Значение переменной a увеличивается в 3 раза
  • Выполняется приращение переменной цикла
  • Переменная i увеличивается на 1
  • Выполняется проверка условия
  • 3 < 4 следовательно условие истинно
  • Выполняется оператор
  • Значение переменной a увеличивается в 3 раза
  • Выполняется приращение переменной цикла
  • Переменная i увеличивается на 1
  • Выполняется проверка условия
  • 4 < 4 следовательно условие ложно
  • Выход из цикла

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

Номер шага a i
0 не инициализирована не инициализирована
1 1 не инициализирована
2 1 0
3 3 0
4 3 1
5 9 1
6 9 2
7 27 2
8 27 3
9 81 3
10 81 4

С помощью таких таблиц вы в дальнейшем сможете разбираться как работает ваша программа, работает ли она правильно и прочее. Как получить такую информацию о программе мы поговорим позднее.
Оператор while выглядит попроще:

while(условие) оператор;

Пока условие истинно оператор будет выполнятся.
Таким образом код:

while (true) System.out.println("Я выполняюсь");

Будет работать вечно, пока не закончится оперативная память вашего компьютера. Допустим вам нужно найти такую первую степень двойки, которая будет больше заданного числа:

int a = 1;
int b = 123;
while (a
Усложним задачу, требуется найти не число, а степень двойки, тогда используя составной оператор можно написать:

int a = 1;
int b = 123;
int i = 0;
while (a
Циклы как и условия являются основой для работы алгоритмов, так что вам необходимо научится хорошо разбираться в них.


Циклы в С++
Циклы в Delphi

  • Александр

    Благодарю за статьи! Жду продолжения! Только начал изучать java и intellij idea. Планируются ли уроки про GUI в intellij idea?

  • OleG

    Очень как-то муторно с возведением в степень. В Java есть отдельный метод Math.pow(), который возводит в степень. Почитайте про него http://proglang.su/java/79.

Научиться программировать

  • на Delphi

  • на Java

  • на C++