«Циклы for»
Оператор for содержит три параметра.
Первый называется инициализацией,
Второй — условием повторения,
Третий — итерацией.
for (инициализация; условие; итерация) {
//тело цикла, т. е. действия, повторяемые циклично
}
В первом параметре обычно выбирают какую-то переменную, с помощью которой будет подсчитываться количество повторений цикла. Её называют счетчиком. Счётчику задают некоторое начальное значение (указывают, начиная с какого значения он будет изменяться).
Во втором параметре указывают некоторое ограничение на счётчик (указывают, до какого значения он будет изменяться).
В третьем параметре указывают выражение, изменяющее счётчик после каждого шага цикла. Обычно это инкремент или декремент, но можно использовать любое выражение, где счётчику будет присваиваться некоторое новое значение.
Перед первым шагом цикла счётчику присваивается начальное значение (выполняется инициализация). Это происходит лишь однажды.
Перед каждым шагом цикла (но после инициализации) проверяется условие повторения, если оно истинно, то в очередной раз выполняется тело цикла. При этом, тело цикла может не выполниться ни разу, если условие будет ложным в момент первой же проверки.
После завершения каждого шага цикла и перед началом следующего (и, значит, перед проверкой условия повторения) выполняется итерация.
Давайте по практикуем!
Создаем новый проект, один класс с методом main.
Наша задача вывести на экран числа от 1 до 50.
Прежде чем писать код, давайте еще раз прочитаем принцип работы цикла for:
Очевидно, что мы будем использовать цикл for. В скобках нужно указать инициализацию, значит отдельно создавать переменную не нужно!!! Потом мы должны задать условие. Условие - это логическое сравнение, которое будет возвращать два значения, true, false. ну и третьим будет итерация, т.е. изменение нашей переменной после каждого шага(цикла). И все будет повторяться снова и снова пока условие не станет false.
Пробуем написать код программы с учетом нашего обсуждения!
И так! В скобка цикла for указываем переменную i; потом условие: i<50; и итерацию: i++. В тело цикла вкладываем метод вывода на экран обработанных значений. Пробуйте!
Вот таким простым и удобным способом можно вывести в консоль обработку значений циклом for
Задача 8.1
1) Попробуйте написать код программы, который будет выводить числа от 25 до 1.
2) Попробуйте написать код программы, которая будет выводить значения от переменной i от -10 до 10.
3) Напишите программу, которая будет выводить все двузначные четные числа.
4) Напишите программу, которая будет выводить на экран все нечетные двузначные числа.
Молодцы! Это было не сложно, а теперь давайте попробуем подсчитать сумму чисел от 1до 100.
Для этого кода программы нужна дополнительная переменная, потому что внутри цикла будет несколько команд. Попробуйте самостоятельно написать код программы.
Смотрим код и исправляем ошибки:
Задача8.2.
Попробуйте написать код программы, которая:
1) подсчитывает сумму чисел от -10 до 10;
2) подсчитывает сумму все четных двухзначных чисел;
3) подсчитывает сумму всех нечетных двухзначных чисел.
Представленная программа будет возводить число из переменной a в натуральную степень из переменной n:
double a = 2;
int n = 10;
double res = 1; // Сюда будем накапливать результат
for (int i = 1; i <= n; i++) {
res = res * a;
}
System.out.println(res);
Представленная программа выведет на экран 10 первых элементов последовательности 2n+2, где n=1, 2, 3…:
for (int i = 1; i < 11; i++) {
System.out.print(2*i + 2 + " ");
}
Представленная программа выведет на экран 10 первых элементов последовательности 2an−1+3, где a1=3:
int a = 3;
for (i=1; i<=10;i++) {
System.out.print(a + " ");
a = 2*a + 3;
}
Но это не все возможности цикла for!
В одном цикле можно задавать сразу несколько счётчиков. При этом несколько выражений в итерации и в инициализации разделяются запятыми. Условие повторения можно задавать только одно, но оно может быть выражением, содержащим сразу несколько счётчиков.
Представленная программа выведет на экран 10 первых элементов последовательности 2an−1–2, где a1=3:
for (int a=3, i=1; i<=10; a=2*a-2, i++) {
System.out.print(a + " ");
}
Представленная программа выведет на экран такую последовательность «0 -1 -4 -9 -16 -25»:
for (int a=0, b=0; a-b<=10; a++, b--) {
System.out.print(a*b + " ");
}
если внутри тела цикла вызвать оператор break, то произойдёт моментальный выход из цикла, не будет закончен даже текущий шаг. Оператор break может быть вызван только тогда, когда внутри цикла присутствует условие.
Например
for (int a=1; a<=10; a++) {
if(a == 5) {
break;
}
System.out.print(a + " ");
}
System.out.print("Конец");
В ряде случаев требуется указать несколько операторов в инициализационной и итерационной частях оператора цикла for. Рассмотрим в качестве примера цикла в следующей программе (скопируйте этот код в свою среду для разработки и скомпилируйте его):
int а, b;
b = 4;
for (a= l; а<b; а++) {
System.out.println (“a = ”+a);
System.out.println ("b= " + а );
b--;
}}}
Как видите, управление этим циклом осуществляется одновременно двумя переменными. А поскольку цикл управляется двумя переменными, то их желательно включить в сам оператор цикла for, а не выполнять обработку переменной b вручную. Правда, для решения этой д в Java предоставляется специальная возможность. Для того чтобы две переменные или больше могли управлять циклом for, в Java допускается указывать несколько операторов как в инициализирующей, так и в итерационной части оператора цикла for, разделяя их запятыми. Используя запятую, предыдущий цикл for можно организовать более рационально:
for ( a= l , b=4; а<b ; а++ , b-- ) {
System.out.println ("a = " + а );
System.out.println ("b = " + b );
}
Задача 8.3.
1. Выведите на экран первые 11 членов последовательности Фибоначчи. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.
2. Для введённого пользователем с клавиатуры натурального числа посчитайте сумму всех его цифр (заранее не известно сколько цифр будет в числе).
3. В городе N проезд в трамвае осуществляется по бумажным отрывным билетам. Каждую неделю трамвайное депо заказывает в местной типографии рулон билетов с номерами от 000001 до 999999. «Счастливым» считается билетик у которого сумма первых трёх цифр номера равна сумме последних трёх цифр, как, например, в билетах с номерами 003102 или 567576. Трамвайное депо решило подарить сувенир обладателю каждого счастливого билета и теперь раздумывает, как много сувениров потребуется. С помощью программы подсчитайте сколько счастливых билетов в одном рулоне?
4. В городе N есть большой склад, на котором существует 50000 различных полок. Для удобства работников руководство склада решило заказать для каждой полки табличку с номером от 00001 до 50000 в местной типографии, но, когда таблички напечатали, оказалось что печатный станок из-за неисправности не печатал цифру 2, поэтому все таблички, в номерах которых содержалась одна или более двойка (например, 00002 или 20202) — надо перепечатывать. Напишите программу, которая подсчитает сколько всего таких ошибочных табличек оказалось в бракованной партии.
5. Электронные часы показывают время в формате от 00:00 до 23:59. Подсчитать сколько раз за сутки случается так, что слева от двоеточия показывается симметричная комбинация для той, что справа от двоеточия (например, 02:20, 11:11 или 15:51).
6. В американской армии считается несчастливым число 13, а в японской — 4. Перед международными учениями штаб российской армии решил исключить номера боевой техники, содержащие числа 4 или 13 (например, 40123, 13313, 12345 или 13040), чтобы не смущать иностранных коллег. Если в распоряжении армии имеется 100 тыс. единиц боевой техники и каждая боевая машина имеет номер от 00001 до 99999, то сколько всего номеров придётся исключить?
Обратите внимание!
У оператора цикла for имеется несколько разновидностей, расширяющих возможности его применения. Гибкость этого цикла объясняется тем, что три его части (инициализацию, проверку условий и итерацию) совсем не обязательно использовать только по прямому назначению. По существу, какую часть оператора цикла for можно применять в любых требующихся целях. Рассмотрим несколько примеров такого применения. В одной из наиболее часто встречающихся разновидностей цикла for пред полагается употребление условного выражения. В частности, в этом выражении совсем не обязательно сравнивать переменную управления циклом с некоторым целевым значением. По существу, условием, управляющим циклом for, может быть любое логическое выражение. Рассмотрим в качестве примера следующий фрагмент кода:
boolean done = false;
for ( int i=l; !done; i ++ ){
//
if ( interrupted ( ) ) done = true;
}
В этом примере выполнение цикла for продолжается до тех пор, пока в переменной done не установится логическое значение true. В этой разновидности цикла for не выполняется проверка значения в переменной i управления циклом.
«Цикл for each»
У оператора цикла for имеется
несколько разновидностей, расширяющих возможности его применения. Гибкость
этого цикла объясняется тем, что три его части (инициализацию, проверку условий
и итерацию) совсем не обязательно использовать только по прямому назначению. По
существу, какую часть оператора цикла for
можно применять в любых требующихся
целях.
Например:
Наиболее
часто встречающаяся разновидность цикла for
предполагает употребление условного
выражения. В частности, в этом выражении совсем не обязательно сравнивать
переменную управления циклом с некоторым целевым значением. По существу,
условием, управляющим циклом for, может быть любое логическое выражение, а
значит может не выполняться ся проверка значения в переменной i при управления
циклом.
Часто
встречающийся цикл for Инициализирующее
цикла или итерационное выражения, или оба вместе могут отсутствовать в
операторе цикла for
В данном примере
инициализирующее и итерационное выражения вынесены за пределы
цикла for. В итоге соответствующие части оператора
цикла for оказываются пустыми. В данном очень
простом примере, демонстрирующем далеко не самый изящный стиль
программирования, это не так важно, но иногда такой подход имеет смысл. Так,
если начальное условие определяется сложным выражением где-то в другом месте
программы или значение переменной управления циклом изменяется
случайным образом в зависимости от действий, выполняемых в теле цикла, то эти
части оператора цикла for
имеет смысл
оставить пустыми. Приведем еще одну разновидность цика for. Оставляя все три части оператора
пустыми, можно умышленно создать бесконечный цикл, т.е. такой цикл, который
никогда не завершается: for
( ; ; ) {тело цикла}.
Этот цикл может
выполняться бесконечно, поскольку отсутствует условие, по которому он мог бы
завершиться. Если в некоторых программах вроде командного процессора
операционной системы требуется наличие бесконечного цикла, то в
большинстве случаев "бесконечные" циклы на самом деле являются лишь циклами с особыми условиями прерывания.
Давайте рассмотрим вторую форму цикла for – цикл for each.
Цикл в стиле for each
предназначен для строго последовательного выполнения повторяющихся действий над
коллекцией объектов вроде массива. Говоря проще цикл for each это
более усовершенствованная форма цикла for, более
современная. Преимущество такого подхода состоит в том, что для его реализации
не требуется дополнительное ключевое слово, а уже существующий код не нарушается.
Синтаксис:
for(тип
данных итерационная_переменная: коллекция){блок операторов}
В цикле for можно перебирать
разные типы коллекций.
Принцип работы цикла:
На каждом шаге цикла из
коллекции извлекается очередной элемент, который сохраняется в указанной итерационной_переменной.
Цикл выполняется до тех пор, пока из коллекции не будут извлечены все элементы.
Поскольку итерационная переменная получает значения из коллекции, тип цикла должен
совпадать (или быть совместимым) с типом элементов, хранящихся в коллекции.
Таким образом, при переборе массива тип должен быть совместим с типом элемента
массива.




Немає коментарів:
Дописати коментар