Блок 1. Раздел 3. Тема 1

Введение в циклы.
Тело и условие цикла while

Сделать цикл – значит указать машине: такой-то код нужно выполнить не один раз, а много раз. Это крайне могучий инструмент всех языков программирования от самых древних до самых современных. Без него, как и без переменных и IF-ов, не обходится ни одна нормальная программа. В циклах вся сила машин – человек указывает, что нужно сделать, и говорит машине – повтори это десять миллионов раз, и она выполняет это за секунду.
Сразу разберём пример. Здесь мы выводим на экран числа от 0 до 99:

//	Заведем переменную i целого типа и равную нулю
	int i = 0;

//	знак цикла while означает 
//	«повторяй блок кода { … } пока верно условие внутри скобок», то есть  (i < 100)
	while (i < 100) {
		System.out.println (i);  // распечатать текущее значение i
		i = i + 1; 	// увеличить i на 1
	}
	System.out.println ("Жизнь за циклом продолжается");
Когда компилятор встретит слово while, он сразу поймёт, что это цикл. Код внутри фигурных скобок после while будет выполняться всё время, пока верно условие в круглых скобках. В данном случае в круглых скобках написано (i < 100), то есть мы ограничиваем переменную i значением 100. Поэтому блок кода внутри фигурных скобок повторится 100 раз.

В фигурных скобках мы написали – распечатать i, затем увеличить её на 1. Этот код будет выполнен много раз, и каждый раз переменная i будет увеличиваться. Сначала она равна 0, потом 1, потом 2 и так далее, и наконец она станет равной 99. Когда i равно 100, то условие i < 100 перестает выполняться, и цикл заканчивается. Заметьте, что поскольку мы написали i строго меньше 100, то последнее значение i=100 в цикл уже не входит. Как часто делают программисты, мы начали с нуля, а не с 1. Посчитайте: от 1 до 99 будет 99 чисел, а от 0 до 99 получится ровно 100 чисел. Поэтому наш цикл сделает 100 оборотов.

В данном случае мы сами решили начать с нуля и поставить условие (i<100). Мы могли бы начать и с 10 и поставить, например, i <=100. Читается такое условие "i меньше либо равно 100". То есть теперь уже 100 включено в последний оборот цикла. В будущих уроках мы будем проходить массивы – наборы чисел, которые нумеруются с нуля. Тогда начинать с нуля и заканчивать строгим неравенством будет необходимо. Пока что вы можете начинать с чего угодно и заканчивать как угодно, лишь бы программа делала в точности то, чего вы от неё хотите.

Переменные подобные i, которые постоянно меняют свои значения в цикле, часто называют счетчиками. Это обиходное, неофициальное название, тем не менее оно очень удобно – ведь с помощью переменной i мы можем сразу посчитать, на каком обороте цикла мы находимся.
Определение. Блок кода, который выполняется в цикле, называется его телом. Тело обычно выделяется парой фигурных скобок { … }, но может состоять из одной строчки кода и тогда ограничивается точкой с запятой и фигурные скобки можно не писать.
В общем виде цикл while выглядит так:
while (условие) { тело цикла }
т.е. повторять тело цикла, пока верно условие
Точно также и все блоки кода в фигурных скобках { … } называются телами. Такие тела есть у IF-ов, у функции main, у классов и так далее. Итак, условие цикла идет в круглых скобках после слова while, а тело – в фигурных скобках после условия.

Всегда можно дописать какое-то особое действие для одного или нескольких оборотов цикла – просто вставьте if в тело цикла:

while (i < 100) { 
	if (i == 50) 
		System.out.println ("печать только на 50-ом обороте");  // особо для 50го оборота
	i ++; 
}
Поскольку фраза i = i+1 пишется часто, то для неё в Java есть сокращение i++. Мы его разбирали в теме 3 раздела 1. Аналогично вы можете написать ++ i. И то, и другое увеличивает число i на 1. Разница их в том, что (++i) как числовое выражение равно значению i+1. Напротив (i++) как числовое выражение равно просто i, а увеличение на единицу произойдёт уже на следующем утверждении в коде. Вы можете легко понять, как они устроены, выполнив код System.out.println (i++).

Кроме увеличения на 1, часто бывает нужно изменить величину i на какое-то число. Разберём это в коде:

int i = 10;
// вывести старое значение 10, хотя i будет равно 11 уже на следующей строчке
System.out.println (i ++); 
i += 2; // увеличить i на 2
i -= 5; // уменьшить i на 5
i *= 3; // увеличить i в 3 раза
i /= 2; // уменьшить i в 2 раза
// Все эти операции можно применять и для переменных других типов, 
// не только в циклах, но и где угодно в коде. 
// В цикле бывает удобно кратно изменять основную переменную на каждом обороте, 
// но программист вправе написать в цикле любой код, какой ему нужен. */ 
Самое главное мы уже освоили. Теперь время решать задачи. Ответьте на несколько вопросов, чтобы лучше усвоился новый материал:
Задача 1. Как сделать так, чтобы этот код печатал числа не от 0 до 99, а от 50 до 201?

//	Заведем переменную i целого типа и равную нулю
	int i = 0;

//	знак цикла while означает 
//	«повторяй блок кода { … } пока верно условие внутри скобок», то есть  (i < 100)
	while (i < 100) {
		System.out.println (i);  // распечатать текущее значение i
		i = i + 1; 	// увеличить i на 1
	}

Решайте больше задач по этому разделу здесь.
В следующей теме расскажем ещё о двух вариантах цикла do-while и for