Циклы while и for . Объектно-ориентированное программирование на Java. Платформа Java SE

Давайте представим, что мы хотим разделить целое число m на другое целое число n.

И мы хотим получить результат целочисленного деления, то есть самое большое количество раз, которое n вписывается в m.

Например, целочисленное деление 7 на 2, равно 3, потому что 2 по 3 раза, это 6.

Остаток равен 1.

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

Поэтому нам нужно сделать повторяемые вычитания.

И если нам удастся вычесть 2 из 7 три раза, это означает, что целочисленное деление равно 3.

Целочисленное деление y и целочисленный остаток x соответствуют формуле, m равно y умножить на n плюс x.

Предположим, что нам даны целые числа m и n.

А в x сохраняется оставшееся значение после вычитаний.

Итак, давайте начнем с x равно m.

y содержит результат целочисленного деления.

Мы инициализируем y 0 и приращиваем y на 1 каждый раз, когда мы вычитаем n из x.

И мы продолжаем вычитать n из x, пока x не меньше n.

Если x больше или равно n, мы вычитаем n из x и увеличим y на 1.

Таким образом, эта программа делает то, что мы хотим, но тут есть проблема.

Мы не знаем, сколько операторов if мы должны добавить.

Потому что это зависит от фактических значений m и n.

Например, с 7 и 2, это будет три выражения if.

При других входных данных это должно быть другое число if выражений.

В Java эту проблему решает оператор while.

Теперь эта программа делает то же самое, что и прежде, повторяет выражение, пока выполняется условие.

Но теперь у нас есть одно большое преимущество.

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

Но теперь вы должны быть очень осторожны при написании условия while.

Потому что есть опасность войти в бесконечный цикл, если условие while никогда не прекратится.

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

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

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

Это легко реализовать подсчетом.

Хитрость заключается в том, чтобы ввести счетчик.

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

Здесь существует три важных элемента: величина, с которой мы хотим начать, значение в конце и шаг между значениями.

Здесь мы начинаем с 0 и заканчиваем 3. И шаг 1.

Поэтому мы выполняем четыре итерации для i равного 0, 1, 2 и 3.

Теперь, помимо подсчета, мы можем захотеть что-то сделать в теле цикла.

В этом случае предположим, что у нас есть другая переменная, n, которую мы хотим умножать на 2 при каждой итерации.

Так как такого рода подсчет используется часто, в Java для этого есть специальная конструкция.

А именно, цикл for.

Этот цикл объединяет три важных момента для переменной счетчика:

Ее инициализацию, условие остановки, и выражение обновления.

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

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

Фигурные скобки необходимы только в том случае, если есть более одного выражения в теле цикла.

Но это хорошая практика, чтобы всегда писать их.

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

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

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

И в Java есть именно такой цикл: do-while.

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

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

Мы уже видели оператор break в выражении switch.

Но оператор break также может прерывать любой цикл.

Предположим, у вас есть цикл.

И иногда желательно немедленно завершить цикл, не проверяя условие.

В таких случаях используется оператор break.

Оператор break немедленно завершает цикл, и управление программой переходит к следующему выражению, следующему за циклом.

Оператор break почти всегда используется вместе с выражением if else.

Также иногда желательно не прервать цикл, а пропустить код тела цикла и перейти к следующей итерации.

Оператор continue пропускает текущую итерацию цикла и когда выполняется оператор continue, управление программой переходит к концу цикла.

Затем проверяется условие, которое управляет циклом.

Оператор continue также почти всегда используется вместе с выражением if else.

Данный текст является ознакомительным фрагментом.

Неопределенные циклы в Java

Вы здесь: Главная >> Java-учебник >> Неопределенные циклы


Неопределенные циклы

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

Первый из них, цикл while, выполняет тело цикла, только пока выполняется его условие.
Вот его общий вид:

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

Цикл while не будет выполнен ни разу, если его условие никогда не выполнится (рис. 3.10).

Рис. 3.10. Блок-схема оператора while

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

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

while (balance < goal)
{
balance += payment;
double interest = balance * interestRate / 100;
balance += interest;
years++;
}

(Не полагайтесь на эту программу при планировании своей пенсии. Мы отбросили такие детали, как инфляция и ожидаемая продолжительность вашей жизни.)

Условие цикла while проверяется в самом начале. Следовательно, возможна ситуация, когда код, содержащийся в блоке, не будет выполнен никогда. Если вы хотите, чтобы блок выполнялся хотя бы один раз, проверку условия нужно перенести в конец. Это можно сделать с помощью цикла do/while.

Его синтаксис выглядит так:

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

Рис. 3.11. Блок-схема оператора do/while

Этот оператор выполняет блок и только затем проверяет условие. Затем он повторяет выполнение блока и вновь проверяет условие и т.д. Например, код в листинге 3.4 вычисляет новый баланс вашего пенсионного счета, а затем спрашивает вас, не собираетесь ли вы на заслуженный отдых.

do
{
balance += payment;
double interest = balance * interestRate / 100;
balance += interest;
year++;
// Вывести на печать текущий баланс

// Спросить, не собирается ли пользователь на пенсию, и получить ответ.

}

Если пользователь отвечает «N», цикл повторяется (см. рис. 3.11). Эта программа является хорошим примером применения циклов, которые нужно выполнить хотя бы один раз, поскольку пользователю нужно видеть баланс, перед тем как решить, достаточно ли его для пенсии.

Листинг 3.3.
Программа

Retirement.java

Листинг 3.4.
Программа Retirement2.java

Сергей Владимирцев
05.