Java цикл for синтаксис. Циклы Java: While и Do-While

В Java, как и практически в любом языке программирования, имеются инструменты для обеспечения многократного повторения определенного фрагмента кода, или, как их принято называть, циклов. Циклы в Java представлены такими операторами, как for и while, а также их разновидностями. Как правило, циклы используются для прохода по одномерным и многомерным массивам и итерируемым структурам данных (в т.ч. коллекциям) с целью нахождения определенных элементов и дальнейших операций с ними. Однако это не единственный способ применения такого инструмента, как цикл Java. Примеры использования будут приводиться по мере их рассмотрения.

Java: описание и примеры

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

while(условие) {

//тело цикла

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

Если в теле цикла заключен всего один оператор, то фигурные скобки можно не ставить, однако считается хорошим тоном, если они стоят всегда. На рисунке выше представлена блок-схема работы данного оператора.

Для наглядности давайте разберем пример, представленный на рисунке ниже:

Объявленная переменная count изначально имеет значение 1. Далее мы видим логическое выражение, заключенное в скобки после названия оператора. Оно будет истинным, т.е. возвращать значение true, до тех пор, пока значение переменной count будет меньше или равно 10. В теле цикла с каждым проходом (итерацией) значение переменной увеличивается на 1 и выводится на консольный экран. Обратите внимание на то, что когда значение переменной достигло 11, цикл прекратил работу.

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

Стоит отметить, что синтаксис Java позволяет использовать оператор while без тела. Приведем пример. Допустим, у нас есть две переменные i = 100 и j = 200, перед нами стоит задача программно вычислить их среднее арифметическое - для этого можно использовать «пустотелый» while:

while(++i < --j);

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

Цикл do-while

В предыдущих примерах если условное выражение изначально возвращало значение false, то выполнение программы проигнорировало бы тело цикла и пошло дальше. Однако часто возникают ситуации, в которых выполнение кода, содержащегося в теле цикла, обязательно хотя бы единожды независимо от истинности условного выражения. Иными словами бывает так, что проверять истинность условного выражения требуется не в начале, а в конце цикла. Такую функциональность может обеспечить разновидность цикла while под названием do-while. Он имеет следующую форму:

do {
//тело цикла

} while(условие);

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

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

Описание и примеры for - Java цикл

Представляет собой универсальную и эффективную языковую форму в Java. До пятой версии Java SDK была только одна традиционная форма оператора for, а после появилась новая - for each. В данном разделе мы ознакомимся с традиционной формой оператора. for Java цикл имеет следующий вид:

Перед тем как управление передастся коду в теле цикла, сначала выполняется инициализация переменной i, выступающей в качестве счетчика. Далее проверяется условное выражение, в котором счетчик сравнивается с определенным значением, и если оно возвращает true, тело цикла выполняется. Затем значение счетчика изменяется на заранее заданный шаг и опять проверяется условное выражение, и так до тех пор, пока условие не станет ложным. Блок-схема ниже иллюстрирует все этапы работы цикла.

Для лучшего понимания приведем пример того, как работает for Java цикл:

Мы видим, что в качестве счетчика используется переменная loopVal. После каждой итерации цикла ее значение будет прирастать на 1, и это будет происходить до тех пор, пока оно не достигнет 11. Обратите внимание, что управляющую переменную можно объявлять и за пределами оператора for, но если вы не собираетесь использовать эту переменную нигде кроме как в цикле, рекомендуется объявлять ее непосредственно в операторе. Имейте в виду, что объявленная в самом операторе переменная имеет область видимости в пределах этого самого цикла.

Бывают ситуации, когда требуется объявить несколько управляющих циклом переменных. For Java цикл позволяет указывать две и более переменные через запятую, причем делать это как при их инициализации, так и при итерации. Такой оператор будет иметь следующий вид:

for(int i = 1, int j = 10; i < j; ++i, --j) {}

При каждой итерации значение переменной i будет увеличиваться на 1, а значение переменной j уменьшаться на 1. Итерации будут выполняться до тех пор, пока i не станет больше или равно j.

Особенности применения оператора for

Цикл for представляет собой довольно гибкую конструкцию, поскольку все три его части (инициализацию, условие и инкремент/декремент) можно использовать не по прямому назначению. К примеру, вместо условного выражения с управляющей переменной можно подставить любую логическую переменную.

boolean exit = false;

for (int i = 0; !exit; ++i) {

На примере выше мы можем наблюдать, как работа цикла абсолютно не зависит от управляющей переменной i и количество итераций зависит исключительно от того, в какой момент переменная exit примет значение true. Более того управляющую переменную можно и вовсе убрать из цикла и это никак не отразится на его работе: for(; !exit;) {}. Хотя это и не самый разумный способ программирования, иногда это может быть полезным. Главное - предусмотреть ситуацию, в которой переменная примет нужное для выхода из цикла значение, чтобы не превратить его в бесконечный.

For Java цикл может быть объявлен и таким способом: for(; ;) {}. Это типичный пример бесконечного цикла с особыми условиями прерывания. О том, каким же образом прерывать такого рода циклы, мы поговорим немного позже.

Цикл в стиле for each

Цикл foreach Java всегда применяется для последовательного перебора элементов массива или какой-либо и выполнения над ними определенных повторяющихся операций. Пример данной формы оператора for представлен ниже:

В качестве итерационной переменной объявляется name, а объявленный ранее массив строк names выступает вторым аргументом оператора. Переменная name будет поочередно принимать значения каждого элемента массива, пока все его элементы не будут извлечены. Следует отметить, что тип переменной должен быть совместимым с типом элементов, которые хранятся в массиве. Также переменная name доступна исключительно для чтения и попытка ее изменения не приведет к изменению самого элемента в массиве.

Операторы прерывания цикла

Существует три оператора прерывания цикла: break, return и continue. Первые два способны полностью прервать работу цикла, а continue прерывает лишь работу текущей итерации. Если вы используете в своем коде умышленно бесконечный цикл Java, данные операторы обязательно должны в нем присутствовать. Рассмотрим простой пример использования break:

Хотя в данном операторе for предусмотрено 11 итераций, выполнится только 8, поскольку, когда счетчик i будет равен 7, сработает условие, в теле которого имеется оператор break.

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

Использование break в качестве goto

Следует иметь в виду, что break прерывает работу только того цикла, в теле которого он непосредственно находится, т.е. если вы используете его во вложенном цикле, то внешний цикл не прекратит своей работы. Для этого оператор break можно использовать в качестве цивилизованной формы goto.

В этом варианте данный оператор используется в связке с меткой, которая позволяет организовывать выход не только из циклов, но и из любого блока кода. Метка представляет собой именованный соответствующим образом идентификатор с двоеточием после него. Метка объявляется в начале помечаемого блока кода. Чтобы прервать выполнение помеченного блока, в нужном месте необходимо объявить: break имя_метки. Рассмотрим пример на рисунке ниже:

В коде объявлено три блока с именами меток One, Two и Three соответственно. Оператор break с меткой Two вложен во все три блока, но при его срабатывании программа выйдет из блоков Three и Two и продолжит выполнение в блоке One. Т.е. в консоли мы увидим два сообщения: Three и One.

Заключение

Мы ознакомились с понятием циклов в Java, главными операторами while и for, а также их формами do-while и for each соответственно. Для лучшего понимания рекомендуем проделать упражнения с применением данных операторов в различных формах, а также различных способов их прерывания и перехода из одного блока в другой.

Цикл - это блок команд, который выполняется снова и снова, пока соблюдается определённое условие. Повторяемый фрагмент кода называют «телом цикла». Одно выполнение тела цикла называют итерацией.

В Яве можно работать с циклами нескольких типов - для этого есть следующие операторы:

while – цикл с предусловием – сначала проверяем условие, затем выполняем тело цикла;

do… while – цикл с постусловием – сначала выполняем один раз тело цикла, затем проверяем условие и, если оно соблюдается, продолжаем;

for – цикл со счётчиком – выполняется и при каждой итерации обновляет счётчик, пока условие в объявлении цикла соблюдается (т.е. проверка условия возвращает true);

сокращенный for (в других языках известен как foreach) – перебирает массив от первого элемента до последнего и на каждой итерации выполняет тело цикла.

Суть условия цикла – проверка выражения с одной или несколькими переменными: «Пока a<11, в каждой итерации выполняем тело цикла и увеличиваем "а" на 1». Но чему равно «а» при первом выполнении цикла?

Если мы используем конструкции с while, значение нужно указать перед началом цикла:

int a = 1;

while (a < 11) {

System.out.println(a);

a++; //увеличиваем а на единицу

}

Если же переменная работает как счётчик цикла, а за его пределами не используется, её инициализируют прямо в условии. И тут же пишут, что с ней делать в конце каждой итерации. Всё это – в одну строку – с помощью for:

for (а=1, a<11, i++) {

System.out.println(a);

}

Получаем тот же результат. Список можно было начать с нуля или с отрицательного значения – диапазон определяем сами.

Сокращенный вариант цикла for не содержит указаний ни на число повторов, ни на действия в конце шага. Цикл типа foreach используют для перебора массивов. От первого элемента нужно переходить к следующему – пока массив не кончится.

int ms = { 1, 2, 3, 4}; //создаем массив

int s = 0;

for(int i: ms) { //указываем, что перебирать

s *= i; //последовательно перемножаем элементы

}

System.out.println(s);

Вложенные циклы Java

Циклы можно вкладывать один в другой. При этом число повторов наружного и вложенных циклов умножается. Если внешний должен выполняться 5 раз и внутренний – 5, всего цикл будет выполнен 25 раз.

Выведем таблицу умножения с помощью двух массивов:

int a, b, result = 0;

for (a = 2; a < 10; a++) {

for (b = 2; b < 10; b++) {

result = a*b;

System.out.println(a+"x"+b+" = "+result);

}

}

Cоздание объектов в цикле Java

Циклы удобны, когда нужно создать и пронумеровать множество объектов. Их число бывает неизвестно заранее: объекты могут создаваться по запросу пользователя. Вот мы спросили, сколько нужно чего-то, и записали число в переменную n. Теперь создадим объекты в нужном количестве:

Something array = new Something[n]; //создаем массив типа “что-то” из n элементов

for(int i = 0; i < n; i++){

array[i] = new Something(); //создаем “что-то” и помещаем его в массив

}

Как выйти из цикла Java

Для выхода из цикла есть ключевые слова break - «прервать», continue - «возобновить» и return - «вернуться». Команда break переключает программу на выполнение следующих за циклом операторов. Условия прерывания цикла в Java оформляют через if-ветвление. Главное, чтобы проверка выполнялась перед основной частью тела цикла.

//после создания массива m пишем:

for (a: m) {

if (a==5) break;

System.out.println(a);

}

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

Если использовать break во вложенном цикле, прервётся только он, а внешний продолжит выполняться.

Для досрочного прерывания итерации цикла for в Java используют continue. Когда программа до него доходит, она пропускает невыполненную часть итерации, обновляет счётчик и переходит к следующей итерации.

В конструкциях while тот же continue работает иначе: возвращает нас к проверке условия продолжения цикла. Другая команда – return – возвращает программу к месту, откуда был вызван метод, в котором цикл находится.

И continue, и break можно использовать с меткой - для перехода к нужной части кода - по аналогии с goto:

break Mark1; //при условии, что где-то выше стоит метка Mark1:

Бесконечный цикл Java

Создать бесконечный цикл легко - достаточно не указывать параметры в for:

for (; ;) {}

Сложнее извлечь из этого пользу. Обычно бесконечность цикла – критическая ошибка, которая мешает выполнению программы. Поэтому каждый цикл стоит проверять на способность корректно завершиться в нужный момент. Для этого нужно:

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

Надо обработать много однотипных данных? Надо вычислить ряд? Надо перемножить матрицы? Все это и намного больше поможет сделать цикл! 🙂 Все вычислительные системы изначально задумывались для того чтобы облегчить обработку данных. А обработку большого количества данных невозможно даже представить без циклов.

Вообще циклы в программировании принято разделять на три группы. Первая группа — это циклы со счетчиком. В них тело цикла выполняется некоторое количество раз, изначально заданное программистом. Такой цикл, обязательно выполнится заданное количество раз. Вторая группа — это циклы с предусловием. В них тело цикла выполняется только после проверки какого-то условия и будет выполняться до тех пор, пока это условие верно. Такие циклы могут не выполниться ни разу (если условие изначально ложно). И третья группа циклов — циклы с постусловием. В них сначала выполняется тело цикла, затем проверяется условие. Такой цикл выполнится как минимум один раз.

Начнем, пожалуй, с цикла со счетчиком. В Java — это цикл for; В общем виде его можно записать так:

For (Начальное условие; конечное условие; изменение) { тело цикла; }

Таким образом, если мы хотим выполнить какое-то действие 10 раз то мы должны записать следующее:

For (int i = 0; i<10; i++) { System.out.println(i); }

такая программа последовательно выведет на экран числа от нуля до девяти. Если чуть подробнее, то мы просто создаем новую переменную i и присваиваем ей начальное значение 0 (int i = 0;). Затем указываем, что цикл должен выполняться до тех пор, пока i < 10 и указываем каким образом должно изменяться i после каждой итерации цикла (i++).

Тех, кто программировал на паскале порадует такая возможность:

Int k = 15; for (float i = 0; i

В этом примере значение переменной i будет увеличиваться на 1,5 при каждой итерации. Можете проверить:).

Следующий цикл на очереди — while . Это цикл с предусловием и в общей форме его можно записать вот так:

While(логическое выражение) { действия }

Ну и если взять рабочий пример, то выглядеть он будет примерно так:

While (a<10) { System.Out.Print(a); a++; }

Итак, понятно, что этот цикл имеет смысл использовать если вы точно не знаете сколько именно итераций необходимо для достижения цели, однако точно знаете условие при котором Ваша цель будет достигнута. Такая конструкция может не выполниться ни разу (ведь это цикл с предусловием)! Сколько раз выполнятся действия в цикле зависит от значения которое изначально было в переменной a .

И третий вид циклов — это циклы с постусловием. Он очень похож на while … do только если в while … do условие проверяется перед выполнением цтела цикла, то здесь условие проверяется уже после того как выполнится тело цикла. А это значит, что цикл выполнится как минимум один раз до того как проверится условие.

Цикл — это многократно повторяющийся фрагмент программы.

В java существует два типа циклов: типа «пока» и типа «n-раз».

Первый тип «пока» предназначен для повторения какого-то действия до тех пор, пока выполняется некоторое условие. Пример: увеличивать число на 5 до тех пор, пока оно не станет трёхзначным.

Второй тип «n-раз» предназначен для повторения каких-то действий заранее известное количество раз. Пример: умножить число само на себя 4 раза.

Цикл типа «пока» (операторы while и do…while)

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

Например, такой цикл выполнится 4 раза, а на экран будет выведено «1 2 3 4 »:

Int i = 1; while (i < 5) { System.out.print(i + " "); i++; }

Такой цикл не выполнится ни разу и на экран ничего не выведется:

Int i = 1; while (i < 0) { System.out.print(i + " "); i++; }

Такой цикл будет выполняться бесконечно, а на экран выведется «1 2 3 4 5 6 7 …»:

Int i = 1; while (true) { System.out.print(i + " "); i++; }

Условие, определяющее будет ли цикл повторятся снова, проверяется перед каждым шагом цикла, в том числе перед самым первым. Говорят, что происходит предпроверка условия.

Бывает цикл типа «пока» с постпроверкой условия. Для его записи используется конструкция из операторов do…while.

Такой цикл выполнится 4 раза, а на экран будет выведено «2 3 4 5 »:

< 5);

Такой цикл выполнится 1 раз, а на экран будет выведено «2 »:

Int i = 1; do { i++; System.out.print(i + " "); } while (i < 0);

Тело цикла do…while выполняется по крайней мере один раз. Этот оператор удобно использовать, когда некоторое действие в программе нужно выполнить по крайней мере единожды, но при некоторых условиях придётся повторять его многократно.

Ознакомьтесь со следующей программой (она загадывает случайное целое число из отрезка и просит пользователя его угадать, вводя варианты с клавиатуры, пока пользователь не угадает число, программа будет ему подсказывать, сообщая больше или меньше число загаданное, чем то, что ввёл пользователь):

Import java.util.Scanner; public class Main { public static void main(String args) { // prog - число созданное программой // user - число введённое пользователем int prog, user; // Генерируем случайное целое число от 1 до 10 prog = (int)(Math.random() * 10) + 1; System.out.println("Я загадала число от 1 до 10, отгадайте его."); System.out.print("Вводите ваше число: "); Scanner input = new Scanner(System.in); // Проверяем, есть ли в потоке ввода целое число if(input.hasNextInt()) { do { // Читаем с потока ввода целое число user = input.nextInt(); if(user == prog) { System.out.println("Вы угадали!"); } else { // Проверяем, входит ли число в отрезок if (user > 0 && user <= 10) { System.out.print("Вы не угадали! "); // Если число загаданное программой меньше... if(prog < user) { System.out.println("Моё число меньше."); } else { System.out.println("Моё число больше."); } } else { System.out.println("Ваше число вообще не из нужного отрезка!"); } } } while(user != prog); } else { System.out.println("Ошибка. Вы не ввели целое число!"); } System.out.println("До свиданья!"); } }

Внесите в программу следующие доработки:

    Программа должна загадывать число не из отрезка , а целое число из отрезка от [−10;10], исключая ноль. При этом, постарайтесь, чтобы распределение случайных чисел генерируемых программой было равномерных (т. е. в случае выпадения нуля его нельзя просто заменить на какое-то другое число, например, на 1, ведь тогда 1 будет выпадать с вдвое большей вероятностью, чем остальные числа).

    Программа должна подсказывать пользователю, что он ошибся в знаке, если программа загадала положительное число, а пользователь ввёл отрицательное. И наоборот.

Цикл типа «n-раз» (оператор for)

Оператор for содержит три параметра. Первый называется инициализацией, второй — условием повторения, третий — итерацией.

For (инициализация; условие; итерация) { //тело цикла, т. е. действия повторяемые циклично }

В первом параметре обычно выбирают какую-то переменную, с помощью которой будет подсчитываться количество повторений цикла. Её называют счетчиком. Счётчику задают некоторое начальное значение (указывают, начиная с какого значения он будет изменяться).

Во втором параметре указывают некоторое ограничение на счётчик (указывают, до какого значения он будет изменяться).

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

Перед первым шагом цикла счётчику присваивается начальное значение (выполняется инициализация). Это происходит лишь однажды.

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

После завершения каждого шага цикла и перед началом следующего (и, значит, перед проверкой условия повторения) выполняется итерация.

Представленная программа выводит на экран числа от 1 до 100:

For (int i = 1; i <= 100; i++) { System.out.print(i + " "); }

Представленная программа выводит на экран числа от 10 до −10:

For (int s = 10; s > -11; s--) { System.out.print(s + " "); }

Представленная программа выводит на экран нечётные числа от 1 до 33:

For (int i = 1; i <= 33; i = i + 2) { System.out.print(i + " "); }

Представленная программа вычислит сумму элемнтов фрагмента последовательности 2, 4, 6, 8,… 98, 100. Итак:

Int sum = 0; // Сюда будем накапливать результат for (int j = 2; j

Представленная программа будет возводить число из переменной 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 первых элементов последовательности 2a n−1 +3, где a 1 =3:

Int a = 3; for (i=1; i<=10;i++) { System.out.print(a + " "); a = 2*a + 3; }

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

Представленная программа выведет на экран 10 первых элементов последовательности 2a n−1 -2, где a 1 =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)

Как цикл типа «пока» так и цикл типа «n-раз» можно завершить досрочно, если внутри тела цикла вызвать оператор break . При этом произойдёт моментальный выход из цикла, не будет закончен даже текущий шаг (т. е. если после break присутствовали какие-то ещё операторы, то они не выполнятся).

В результате работы следующего примера на экран будут выведены только числа «1 2 3 4 Конец»:

For (int a=1; a

Когда программа будет выполнять цикл в пятый раз(войдёт в цикл с счётчиком равным 5), сразу же будет проверено и окажется истинным условие при котором выполнится оператор break. Оставшаяся часть тела цикла (вывод на экран) уже производится не будет: программа сразу перейдёт к выполнению операций указанных после цикла и далее.

C помощью оператор break можно прервать заведомо бесконечный цикл. Пример (на экран выведется «100 50 25 12 6 3 1 0 » и после этого цикл остановится):

Int s = 100; while (true) { System.out.print(s + " "); s = s / 2; if(s == 0) { break; } }

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

Int a; for (a=25; a>0; a--) { break; System.out.print(a + " "); } System.out.print("a=" + a);

В представленном выше примере вывода в цикле на экран не произойдёт ни разу, а когда переменная a выведется на экран после цикла, то окажется, что её значение ни разу не менялось, т. е. выведено будет «a=25» (и ничего больше).

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

Задачи

    Создайте программу, выводящую на экран все четырёхзначные числа последовательности 1000 1003 1006 1009 1012 1015 ….

    Создайте программу, выводящую на экран первые 55 элементов последовательности 1 3 5 7 9 11 13 15 17 ….

    Создайте программу, выводящую на экран все неотрицательные элементы последовательности 90 85 80 75 70 65 60 ….

    Создайте программу, выводящую на экран первые 20 элементов последовательности 2 4 8 16 32 64 128 ….

    Выведите на экран все члены последовательности 2a n-1 -1, где a 1 =2, которые меньше 10000.

    Выведите на экран все двузначные члены последовательности 2a n-1 +200, где a 1 = -166.

    Создайте программу, вычисляющую факториал натурального числа n, которое пользователь введёт с клавиатуры.

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

    Проверьте, является ли введённое пользователем с клавиатуры натуральное число — простым. Постарайтесь не выполнять лишних действий (например, после того, как вы нашли хотя бы один нетривиальный делитель уже ясно, что число составное и проверку продолжать не нужно). Также учтите, что наименьший делитель натурального числа n, если он вообще имеется, обязательно располагается в отрезке .

    Создайте программу, выводящую на экран 12 первых элементов последовательности 2a n-2 -2, где a 1 =3 и a 2 =2.

    Выведите на экран первые 11 членов последовательности Фибоначчи. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.

    Для введённого пользователем с клавиатуры натурального числа посчитайте сумму всех его цифр (заранее не известно сколько цифр будет в числе).

    В городе N проезд в трамвае осуществляется по бумажным отрывным билетам. Каждую неделю трамвайное депо заказывает в местной типографии рулон билетов с номерами от 000001 до 999999. «Счастливым» считается билетик у которого сумма первых трёх цифр номера равна сумме последних трёх цифр, как, например, в билетах с номерами 003102 или 567576. Трамвайное депо решило подарить сувенир обладателю каждого счастливого билета и теперь раздумывает, как много сувениров потребуется. С помощью программы подсчитайте сколько счастливых билетов в одном рулоне?

    В городе N есть большой склад на котором существует 50000 различных полок. Для удобства работников руководство склада решило заказать для каждой полки табличку с номером от 00001 до 50000 в местной типографии, но когда таблички напечатали, оказалось что печатный станок из-за неисправности не печатал цифру 2, поэтому все таблички, в номерах которых содержалась одна или более двойка (например, 00002 или 20202) — надо перепечатывать. Напишите программу, которая подсчитает сколько всего таких ошибочных табличек оказалось в бракованной партии.

    Электронные часы показывают время в формате от 00:00 до 23:59. Подсчитать сколько раз за сутки случается так, что слева от двоеточия показывается симметричная комбинация для той, что справа от двоеточия (например, 02:20, 11:11 или 15:51).

    В американской армии считается несчастливым число 13, а в японской — 4. Перед международными учениями штаб российской армии решил исключить номера боевой техники, содержащие числа 4 или 13 (например, 40123, 13313, 12345 или 13040), чтобы не смущать иностранных коллег. Если в распоряжении армии имеется 100 тыс. единиц боевой техники и каждая боевая машина имеет номер от 00001 до 99999, то сколько всего номеров придётся исключить?

2010, Алексей Николаевич Костин. Кафедра ТИДМ математического факультета МПГУ.

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

Цикл – это последовательное выполнение повторяющихся действий на основе заданного предусловия. Например, нужно переставить сто ящиков из одного угла в другой. Если это каким-то образом записать на языке Java (к сожалению, переставить за вас ящики Java не сможет), то получится запись в сто строк:

1. взять ящик №1 и поставить в другой угол;
2. взять ящик №2 и поставить в другой угол;
3. взять ящик №3 и поставить в другой угол;

100. взять ящик №100 и поставить в другой угол;

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

Существует три оператора представляющих циклы в языке Java – это while, do/white и for. Каждый из операторов необходим в своей ситуации, но все же чаще всего используется оператор for. Рассмотрим по порядку каждый из операторов.

Оператор while

Синтаксическая запись оператора while выглядит следующим образом:

While(условие) { // действия }

Так же имеет место выполнение определенного предусловия, но в отличие от оператора if/else, данная конструкция построена на циклах проверки условия. Когда программа доходит до оператора while, если предложенное условие истинно, происходит выполнение всех действий в блоке из фигурных скобок {…}. После выполнения этих действий, программа снова делает очередную проверку условия после оператора while и если условие опять истинно, происходит повторное выполнение действий в блоке. Действия в блоке выполняются до тех пор, пока условие не станет ложным и только тогда происходит выход из цикла while.
Для выхода из циклов чаще всего используются так называемые счетчики. Рассмотрим не большой пример:

Int i = 0; while (i < 10) { // действия i++; }

Сначала переменной i присваивается значение 0, далее происходит проверка условия i0)

{ // действия i--; }

Те же действия, но уже в обратную сторону. Дополнительно в цикле while (да и вовсе других циклах) имеется возможность использования булевых переменных, содержащих значения false или true. В этом случае происходит проверка определенного предусловия.

Boolean i = true; while (i) { // действия }

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

Напоследок хочу еще обратить ваше внимание на оператор равно ==. Если записать цикл таким образом:

Int i = 0 while (i == 5) { // действия i++; }

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

Int i = 0 while (i = 5) { // действия i++; }

В предусловии происходит присвоение переменной i значения 5, а это действие не запрещено и что мы имеем в итоге? Начнется выполнение этого блока цикла в конце которого значение i увеличится на один, но в предусловии после оператора while, переменной i новь будет присвоено значение пять и цикл продолжит свою работу до бесконечности. Это пример простого бесконечного цикла и как следствие, классическая ошибка, случающаяся очень часто с начинающими программистами.

Цикл do/while

Только что рассмотренный нами цикл while, при определенных условиях может и не заработать. Например, если условие будет изначально ложно, то цикл не выполнится ни разу. Программа, дойдя до строки кода с оператором while, проверит условие и если оно будет равно false, проигнорирует весь цикл и перейдет к коду, следующему сразу за циклом while. Но иногда возникает необходимость в выполнении цикла по крайней мере один раз. Для этих целей в Java существует цикл do/while. Запись и создание цикла do/while осуществляется следующим образом:

Do { // действия }while (условие)

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

Цикл for

Это самый распространенный цикл в программировании. Работа цикла for основан на управлении счетчиком. Смысл работы этого цикла схож с рассмотренными выше циклами while и do/while. Посмотрите как выглядит синтаксическая запись цикла for:

For (int i = 0; i < 10; i++) { // действие }

После ключевого слова for, следует условие выполнения цикла. Само же условие объединяет в себе три этапа. Сначала следует инициализация счетчика i = 0, затем проверка условия i < 10 и в конце увеличение переменной i на единицу.

Работает цикл for следующим образом. Когда программа доходит до цикла, то происходит инициализация счетчика i = 0 и проверяется условие i < 10. Далее программа переходит в тело цикла. По окончанию всех действий в цикле for, происходит обращение к третьему этапу цикла: i++, увеличивая счетчик на единицу. После чего сразу же происходит переход ко второму этапу – проверке переменной i < 10 и повторный выход в тело цикла. Весь цикл продолжается до тех пор, пока условие i < 10 не станет ложным. Цикл for используется постоянно при инициализации массива данных, где без него очень сложно, а порой и не возможно обойтись. Так же как и в цикле while возможно использование оператора декремента, например.