Неопределенные циклы
В языке 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
|