JavaLessons
Операторы цикла (for, while, do-while), оператор break
Цикл в программировании используется для многократного повторения определенного фрагмента кода. В Java существует 3 оператора цикла: for, while, do-while.
В этом уроке мы рассмотрим:
Как применяются операторы цикла for, while, do-while. Досрочный выход из цикла В конце урока предложены упражнения для закрепления материала.
Рассмотрим подробнее использование операторов цикла в Java.
При использовании конструкции for заранее известно, сколько раз необходимо осуществить повторение. При использовании конструкций while или do-while повторения будут происходить до тех пор, пока выполняется некоторое условие (логическое выражение)
Цикл for в Java.
Рассмотрим пример: вывод на экран числа от 1 до 10.
for (int i = 1; i
Конструкция for имеет следующий вид:
for (инициализация; условие; итерация) < //тело цикла >
Инициализация — первый параметр, который содержит переменную и ее начальное значение. С помощью этой переменной будет подсчитываться количество повторений цикла. В нашем примере это переменная int i = 1.
Условие — второй параметр, содержит некоторое логическое выражение — условие при котором будет выполняться цикл. В нашем примере это условие i
Итерация — третий параметр, выражение, изменяющее переменную (заданную в инициализации) после каждого шага цикла. Изменение происходит только в случае выполнения условия. В нашем примере итерация i++ — увеличение переменной на единицу. Также для итерации часто используется i— — уменьшение переменной на единицу.
Пример: Вывод на экран чисел от 10 до −10:
for (int i = 10; i > -11; i--)
Цикл while в Java.
Пример: Вывод на экран значений от 1 до 10.
int i = 1; while(i < 11)< System.out.println("i language-plaintext highlighter-rouge">while(логическое_выражение) < //тело цикла >
Конструкция while выполняет выражение в фигурных скобках до тех пор, пока параметр логическое_выражение имеет истинное значение (true). Этот параметр является условием выполнения цикла. В выше приведенном примере, логическое выражение имеет вид i < 11.
Истинность логического выражения (условия) проверяется перед каждым шагом цикла, в том числе и перед первым. while так же называют оператором предусловия.
Приведем пример цикла, который не выполнится ни разу:
int i =10; while(i < 5)< System.out.println("i language-plaintext highlighter-rouge">while(true) < //тело цикла >
Цикл do-while в Java.
В отличие от оператора while, do-while является оператором постусловия, который сначала выполняет тело цикла, а потом осуществляет проверку условия. Таким образом, тело цикла выполнится всегда хотя бы один раз.
Пример: Вывод на экран значений от 1 до 10.
int i = 1; do< System.out.println("i language-plaintext highlighter-rouge">do < //тело цикла >while(логическое_выражение);
Как видно из конструкции, тело цикла выполняется перед проверкой условия. Впоследствии, тело цикла повторится в случае, если логическое_выражение было истинно. Оператор do-while удобно применять, если некоторые действия необходимо выполнить, по крайней мере, один раз, а их повторение будет зависеть от условия.
Вспомним пример цикла while, который не выполнится ни разу, и перепишем его с помощью оператора do-while
int i =10; do< System.out.println("i досрочный-выход-из-цикла-оператор-break">Досрочный выход из цикла (оператор break) Выполнение цикла можно прервать, если внутри тела цикла вызвать оператор break. После выполнения оператора break произойдет моментальный выход из цикла (не будет окончена даже текущая итерация). Управление передастся оператору, следующему за циклом.
В следующем примере реализован поиск символа в строке. Оператор break используется для выхода из цикла for. В цикле происходит прохождение всех символов строки (с первого по последний) и сравнение с искомым символом. В случае нахождения нужного символа нет смысла просматривать оставшуюся часть строки, тем самым продолжая цикл, поэтому имеет смысл использовать оператор break, как только символ будет найден.
public class BreakDemo < public static void main(String[] args) < //строка для поиска String searchMe = "Мама мыла раму"; //количество символов в строке int max = searchMe.length(); //символ, который нужно найти в строке char symb = 'ы'; //переключатель найдено/не найдено boolean find = false; for (int i = 0; i < max; i++) < // если символ на позиции i в строке равен искомому символу if (searchMe.charAt(i) == symb) < //переключаемся в режим "найдено" и выходим из цикла find = true; break; >> //выводим соответствующее сообщение: найден или не найден символ if (find) System.out.println("Символ '" + symb + "' найден в строке"); else System.out.println("Символ '" + symb + "' не найден в строке"); > >
- Как реализовать бесконечный цикл?
- Сколько операторов цикла существует в языке Java?
- В данном коде, на консоль будут выведены числа от 1 и до скольки?
for (int i = 1; i
- При помощи цикла for вывести на экран нечетные числа от 1 до 99.
- Дано число n при помощи цикла for посчитать факториал n!
- Перепишите программы с использованием цикла while.
- Даны переменные x и n вычислить x^n.
- Вывести 10 первых чисел последовательности 0, -5,-10,-15..
- Переделайте последний пример на break.Необходимо, чтобы заданный символ встречался в строке хотя бы 2 раза.
Для чего использовать operator
В этом коде у меня возникает вопрос для чего использовать оператор если можно в main() Сделать Counter c3 = c1.seconds + c2.seconds и код будет прекрасно работать без перегрузки операторов. Для чего тогда нужен оператор?
Отслеживать
задан 10 июл 2020 в 12:21
421 4 4 серебряных знака 10 10 бронзовых знаков
std::string hi<"Hello">; std::string world; std::string omg = hi + ' ' + world;"Hello">
10 июл 2020 в 12:29
Конкретно в данном случаи для удобства .
10 июл 2020 в 12:35
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
познакомьтесь с понятиями инкапсуляции и абстракции, потому что вызов оператора может чуть ли не ракету запускать, даже на простом примере вот, как просто сложить комплексные числа и вывести их с перегрузками, не заглядывая во внутреннюю реализацию:
#include class Complex < private: int x, y; public: Complex(int x, int y) < this->x = x;this->y = y; > friend Complex operator+(const Complex& lhs, const Complex& rhs) < return Complex(lhs.x + rhs.x, lhs.y + rhs.y); >friend std::ostream& operator <<(std::ostream& out, const Complex& complex) < std::cout << complex.x << "+i" << complex.y; return out; >>; int main()
Отслеживать
ответ дан 10 июл 2020 в 12:32
2,812 1 1 золотой знак 9 9 серебряных знаков 24 24 бронзовых знака
Зачем нужен оператор ? при вызове метода? [дубликат]
А конкретно интересен оператор '?' при вызове метода Invoke на событии. Зачем нужен данный оператор? Какую роль он выполняет если применяется подобным образом при вызове методов? Касательно этого куска кода, который некачественно вырезан из контекста, информация не интересна. Нужно общее предназначение оператора '?'.
Отслеживать
28.7k 22 22 золотых знака 61 61 серебряный знак 143 143 бронзовых знака
задан 18 июл 2018 в 8:53
Алексей Федотов Алексей Федотов
724 6 6 серебряных знаков 21 21 бронзовый знак
Синтактический сахар, чтобы не писать if(Boom != null) Boom.Invoke(this, EventArgs.Empty); . И оператор идет вместе с точкой ?. .
18 июл 2018 в 8:58
Вопрос не дубликат, а объяснение того же предмета с обратной стороны. ИМХО.
18 июл 2018 в 11:05
@Kromster Это и называется дубликат. Никто не говорит что этот вопрос плохой или не нужен, просто у этих вопросов общий пул ответов.
20 июл 2018 в 8:52
@vp_arth "Чем забивать гвозди? - молотком" и "Что забивать молотком? - гвозди". Вопросы хоть и с "общим пулом ответов", но все же разные (хотя и связанные).
20 июл 2018 в 8:57
Поэтому(вопросы разные, ответы нет) и существует механизм связывания таких вопросов - "закрытие как дубликата". Это отличается от "закрытия вопросов плохого качества".
20 июл 2018 в 9:07
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Начиная с C# 6.0 в языке появился оператор условного null (Null-Conditional Operator) или, как его нередко называют, элвис-оператор. Он позволяет упростить проверку на значение null в условных конструкциях.
И в данном примере, если Boom == null , вызов Invoke не произойдет. Если Boom != null , то вызов произойдет.
Общее предназначение оператора таково - если переменная, которая стоит перед ? , равна null , то вызов метода на этом объекте не произойдет.
Условный оператор if. Конструкция if-else
На этом занятии мы познакомимся с условным оператором if. Что он делает и для чего нужен? На предыдущем занятии мы с вами рассматривали операции сравнения, которые выдают либо 0 (false), либо 1 (true). Так вот, чтобы программа могла менять свое поведение в зависимости от этих значений, как раз можно воспользоваться оператором if.
Принцип его работы очень прост. Процессор последовательно выполняет операторы (команды) и, как только доходит до условного оператора, то при истинности условия выполняется одна группа операторов, а иначе – другая:

Это похоже на процесс ветвления при выполнении команд. Поэтому условные операторы еще иногда называют операторами ветвления.
Чтобы мы могли использовать оператор if в своих программах, нам нужно знать его синтаксис. В самых простых вариациях он имеет следующий вид:
Здесь выражение – это любая конструкция языка Си, которая возвращает числовые значения. Число 0 будет интерпретировано как false, а любое не нулевое – как true. После круглых скобок должен идти оператор, который выполняется при истинности выражения. Если же нужно выполнить группу операторов, то для этого используются операторные фигурные скобки, которые можно воспринимать, как единый составной оператор. Поэтому, формально, после оператора if всегда следует один оператор.
Давайте для примера посмотрим, как можно использовать этот оператор для вычисления модуля числа:
#include int main(void) { int x; scanf("%d", &x); if(x 0) x = -x; printf("x = %d\n", x); return 0; }
Вначале в переменную x вводится с клавиатуры некоторое целое значение, а затем, делается проверка: если число x меньше нуля (то есть, отрицательное), то выполняется команда x = -x и знак меняется на противоположный, число становится положительным. Причем, эта команда будет выполнена только при условии, что x меньше нуля. Если же x больше или равен нулю, то команда пропускается и число остается положительным. В результате мы этой проверкой формируем модуль числа.
Обратите внимание, что при истинности условия выполняется только один оператор x = -x. Функция printf(), которая записана следующей строчкой, находится вне условного оператора и выполняется всегда. С условным оператором if связана только одна команда x = -x.
Кстати, в этой же программе было бы правильно проверить корректность введенного значения. Для этого достаточно проверить, что функция scanf() вернула единицу. Но я пропишу обратное условие:
if(scanf("%d", &x) != 1) { printf("Error input"); return 0; }
Смотрите, в качестве выражения здесь выступает вызов функции scanf() с последующей проверкой на неравенство единице. Так тоже вполне можно делать. Затем, если вводится некорректное значение, то это условие оказывается истинным и выполняются операторы внутри фигурных скобок. Будет выведена строка с сообщением об ошибке и оператор return 0, который завершит функцию main() и, как следствие, всю программу.
Не редко в программах на языке Си можно встретить использование оператора if с одной переменной в качестве условия, например, так:
if(x) x = -x;
Это тоже допустимо, т.к. в круглых скобках можно указывать любое выражение, которое возвращает числовое значение. И легко догадаться, если значение x равно 0, то условие считается ложным, а при любом другом – истинным.
А если нам нужно инвертировать это условие, то достаточно воспользоваться логической операцией НЕ следующим образом:
if(!x) x = -x;
Тогда все будет наоборот, условие истинно при x равном 0, и ложно при любом другом числовом значении.
Вообще, используя логические операции, можно формировать произвольные составные условия. Например, проверить попадание точки с координатой x в диапазон [3; 11]:
if(x >= 3 && x 11) printf("x in [3; 11]\n");
А в качестве самостоятельного задания напишите проверку непопадания значения x в этот же диапазон [3; 11]. Вся информация для этого у вас уже есть.
Конструкция if-else
Следующим шагом напишем программу различия положительных и отрицательных введенных чисел. Используя имеющиеся знания, это можно сделать следующим образом:
#include int main(void) { int x; if(scanf("%d", &x) != 1) { printf("Error input"); return 0; } if(x 0) printf("x < 0\n"); if(x >= 0) printf("x >= 0\n"); return 0; }
У нас здесь два подряд идущих условия. Причем, взаимоисключающие. Действительно, x не может быть одновременно и меньше нуля и больше либо равно. После ввода значения возможен только один вариант. В таких ситуациях было бы логично проверить первое условие, если оно истинно, выполнить соответствующий оператор, а иначе, выполнить другой оператор без какой-либо проверки. Такую конструкцию в языке Си можно записать следующим образом:
if() оператор_1;
else оператор_2;
или с использованием операторных скобок:
Здесь ключевое слово else как раз и соответствует ветке «иначе», то есть, оператор_2 (или операторы от 1 до M в фигурных скобках) выполняется, если не сработало (оказалось ложным) выражение в условном операторе if. Таким образом, если условие в операторе if истинно, то выполняется оператор_1 (или аналогичные операторы в фигурных скобках), а иначе – оператор_2 (или аналогичные операторы в фигурных скобках).
Давайте перепишем нашу программу с использованием этой конструкции. Получим:
#include int main(void) { int x; if(scanf("%d", &x) != 1) { printf("Error input"); return 0; } if(x 0) printf("x < 0\n"); else printf("x >= 0\n"); return 0; }
Из-за того, что здесь остался только один условный оператор, программа будет работать несколько быстрее. И везде, где мы имеем набор взаимоисключающих условий, их следует оформлять в виде конструкции if-else. Мало того, в нашем примере мы можем пойти дальше и после ключевого слова else прописать еще один условный оператор, например, так:
if(x 0) printf("x < 0\n"); else if(x > 0) printf("x > 0\n"); else printf("x == 0\n");
Здесь после первого else записан еще один условный оператор if с проверкой x > 0 и у этого второго условного оператора также имеется свой блок else. Получилась такая вложенная конструкция из операторов if-else.
Я специально в программе второй блок if-else сместил вправо, чтобы визуально показать его вложенность в первый блок else. То есть, здесь последний оператор else относится именно ко второму условному оператору if. Или, это же вложение можно было бы для лучшего понимания оформить и так:
if(x 0) printf("x < 0\n"); else { if(x > 0) printf("x > 0\n"); else printf("x == 0\n"); }
В операторных скобках мы определили вложенный оператор if. Но в практике программирования фигурные скобки в этом случае не пишут, а оформляют такие вложения следующим образом:
if(x 0) printf("x < 0\n"); else if(x > 0) printf("x > 0\n"); else printf("x == 0\n");
Читается и понимается такая конструкция достаточно просто. Сначала идет проверка первого условия x < 0. Если оно истинно, то выполняется оператор по условию и дальнейшие блоки пропускаются. Если же первое условие ложно, то попадаем в блок else первого оператора if и там осуществляется проверка вложенного условия x >0. Если это условие истинно, то выполняется оператор printf("x > 0\n"), а если ложно, то переходим в последний блок else, который гарантированно срабатывает с выполнением оператора printf("x == 0\n").
Но всегда следует помнить, что конструкция if-else, или вложенные конструкции if-else, как правило, используются при проверке взаимоисключающих условий. Хотя это не всегда так. Например, нам нужно определить размер неотрицательного числа: является ли оно однозначным, двухзначным, трехзначным или каким-либо еще. Такую проверку можно прописать следующим образом:
if(x 10) printf("x in [0; 9]\n"); else if(x 100) printf("x in [10; 99]\n"); else if(x 1000) printf("x in [100; 999]\n"); else printf("x > 999\n");