...
}
Важно: нельзя задавать в качестве условия продолжения цикла while ключевое слово false по причине того, что итерации цикла не будут выполнены ни разу.
Рассмотрев выполнение цикла while, опишем цикл do-while.
Цикл с постусловием do-while – это цикл, который, как и цикл while, продолжает свое выполнение (запускает новые итерации цикла) до тех пор, пока выполняется условие его продолжения. Условие продолжения в do-while представляется по тем же правилам, что и в цикле while. Главное отличие while и do-while заключается в том, что цикл do-while – это цикл с постусловием. Понятие постусловие здесь обозначает то, что сперва выполняется итерация цикла, а затем проверяется условие продолжения цикла. Примером цикла do-while в реальной жизни может стать процесс выбора заготовки для изготовления какого-нибудь изделия – например процесс выбора досок для изготовления скворечника. Сперва берется доска, а затем проверяется, подходит ли доска для изготовления скворечника. Если доска подходит, то наш цикл завершается – мы выбрали нужную доску. Если же доска не подходит, то мы повторяем итерацию цикла для другой доски.
Цикл do-while имеет следующую конструкцию:
Синтаксис цикла while на языке Java имеет следующий вид:
Листинг 3 – While
do {//переменная a описана вне представленного листинга
a+=a; //прибавление значения a к a и сохранение полученного результата в a.
} while (a <1000);
Важно: после логического выражения ставится точка с запятой (см. листинг 3)!!!
Важно: в качестве условия продолжения цикла do-while можно писать ключевое слово false – в таком случае цикл проведет одну итерацию.
Наконец, рассмотрим цикл со счетчиком for.
Цикл со счетчиком for – это цикл, которые продолжает свое выполнение (запускает новые итерации цикла) до тех пор, пока выполняется условие его продолжения (как и другие циклы). Ключевым отличием цикла for от циклов while и do-while является то, что в цикле for возможно создание и использование счетчика. Счетчиком в данном случае может выступать любая переменная, которая в процессе работы цикла будет изменять свое значение. Условием продолжения цикла for в данном случае будет выступать условие отношения переменной и какого-либо значения. Опишем, например, работу цикла for на примере пятидесяти отжиманий. Сперва инициализируется счетчик отжиманий – на момент начала цикла это число 0. Затем описывается условие продолжения работы цикла – пока отжиманий меньше пятидесяти. Наконец, описывается изменение счетчика после выполнения итерации цикла – значение счетчика отжиманий увеличивается на 1. Таким образом цикл заверит работу в тот момент, когда счетчик отжиманий станет равен пятидесяти.
Цикл for имеет следующую конструкцию:
Синтаксис цикла for на языке Java имеет следующий вид:
Листинг 4 – For
for (int i=0;i<10;i++) {
a+=a; //переменная a объявлена вне листинга
}
Описание цикла for состоит из трех частей – инициализация счетчика, логическое выражение и изменение счетчика.
Инициализация счетчика происходит перед выполнением первой итерации цикла.
Проверка продолжения работы цикла происходит перед выполнением каждой итерации и представляет собой логическое выражение. Изменение счетчика происходит после проведения итерации.
Важно: объявление переменной счетчика может происходить перед описанием цикла:
Листинг 5 – For с объявлением счетчика перед циклом
int i;
for (i=0;i<10;i++) {
a+=a; //переменная a объявлена вне листинга
}
Важно: любая часть объявления цикла может быть опущена. Например, можно инициализировать счетчик перед циклом и не описывать это при описании цикла for. Подобным образом можно опустить любую часть описания цикла. В таком случае эта внутри пропущенной части ничего не пишется. При этом точка с запятой, отделяющая пропущенную часть, все равно остается (см. листинг 6):
Листинг 6 – For с объявлением инициализацией счетчика вне описания цикла
int i=0;
for (;i<10;i++) {
a+=a; //переменная a объявлена вне листинга}
Кроме того, любая часть описания цикла может не описана вообще – например, мы можем не описывать условие продолжения цикла и в таком случае вместо условия продолжения цикла будет использовано значение true.
Важно: части описания цикла for (инициализация счетчика, условие продолжения цикла и изменение счетчика) не связаны между собой – это значит, что логическое выражение может не содержать в себе счетчик, и вместо счетчика может изменяться другая переменная:
Листинг 7 – For c «не связанным описанием»
int i;
int x=7;
int y=9;
for (i=0; x<10; y++) {
a+=a; //переменная a объявлена вне листинга
}
Важно: циклы, условия и другие блоки кода могут быть вложенными! Это значит, например, что внутри блока for может быть расположен другой цикл, условие или иной блок:
Листинг 7 – Вложенный цикл
for (int i=0; i<10; i++) {
for (int j=0; j<10; j++)
a++;//переменная объявлена вне листинга
}
При работе с циклами возможно использование ключевых слов break и continue.
Ключевое слово break работает аналогично тому, как оно работает в блоке switch – т.е. прерывает выполнение цикла:
Листинг 8 – Break
for (int i=0; i<10; i++) {
if (i==4)
break;//при i=4 цикл прекратит работу
}
Ключевое слово break может быть использовано совместно с меткой для того, чтобы завершить несколько вложенных циклов:
Листинг 9 – Break с меткой
x: for (int i=0; i<10; i++) {
for (int j=0; j<10; j++)
if (j==4)
break x;//при j=4 оба цикла завершатся
}
Ключевое слово continue может быть для ручного запуска новой итерации цикла. Как и случае с break, continue может быть использован совместно с меткой для запуска итерации цикла, находящегося выше по контексту.
Листинг 10 – Continue
x: for (int i=0;i<10;i++)
for (int j=0;j<100;j++)
if (j==5)
continue x;//запустится итерация на внешнем цикле
При работе с циклами, условиями и рядом других конструкций следует учитывать понятие видимости переменной.
Работая над программой, мы может работать в контексте класса, метода или контекста блока кода. Описывая методы или не переменные внутри класса (примером может послужить метод main или переменные, объявленные вне метода, но в классе), мы работаем в контексте класса.
Описывая работу метода, мы работаем в контексте метода. Работая внутри блока if, for, while и т.п. мы имеем ввиду контекст кода.
Суть видимости переменной опирается на контексты. Переменные, объявленные в вышестоящем контексте. Например, переменные, объявленные в контексте класса, видны внутри методов и блоков. Переменные, которые объявленные в нижестоящем контексте, не видны в вышестоящем контексте. Например, переменные, объявленные внутри блока if, не видны за его пределами. Если переменные из разных контекстов имеют одинаковое имя, то внутри нижестоящего контекста идет работа с переменной нижестоящего контекста. Такая переменная называется локальной.
Задание: повторить материал ИТ-школы Samsung, решить не менее 5 задач блока For, не менее 5 задач блока While из задачника Абрамяна, решить задания электронной системы обучения пунктов 1.7 (включая дополнительные)