Цикл в программировании используется для многократного повторения определенного фрагмента кода. В Java существует 3 оператора цикла: for, while, do-while.
В этом уроке мы рассмотрим:
- Как применяются операторы цикла for, while, do-while.
- Досрочный выход из цикла
В конце урока предложены упражнения для закрепления материала.
Рассмотрим подробнее использование операторов цикла в Java.
При использовании конструкции for заранее известно, сколько раз необходимо осуществить повторение. При использовании конструкций while или do-while повторения будут происходить до тех пор, пока выполняется некоторое условие (логическое выражение)
Цикл for в Java.
Рассмотрим пример: вывод на экран числа от 1 до 10.
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
}
Конструкция for имеет следующий вид:
for (инициализация; условие; итерация) {
//тело цикла
}
Инициализация — первый параметр, который содержит переменную и ее начальное значение. С помощью этой переменной будет подсчитываться количество повторений цикла. В нашем примере это переменная int i = 1.
Условие — второй параметр, содержит некоторое логическое выражение — условие при котором будет выполняться цикл. В нашем примере это условие i <= 10
.
Итерация — третий параметр, выражение, изменяющее переменную (заданную в инициализации) после каждого шага цикла. Изменение происходит только в случае выполнения условия. В нашем примере итерация i++
— увеличение переменной на единицу. Также для итерации часто используется i— — уменьшение переменной на единицу.
Пример: Вывод на экран чисел от 10 до −10:
for (int i = 10; i > -11; i--) {
System.out.print(i + " ");
}
Цикл while в Java.
Пример: Вывод на экран значений от 1 до 10.
int i = 1;
while(i < 11){
System.out.println("i= " + i);
i++;
}
Конструкция while имеет следующий вид:
while(
логическое_выражение
) { //тело цикла }
Конструкция while выполняет выражение в фигурных скобках до тех пор, пока параметр логическое_выражение имеет истинное значение (true). Этот параметр является условием выполнения цикла. В выше приведенном примере, логическое выражение имеет вид i < 11.
Истинность логического выражения (условия) проверяется перед каждым шагом цикла, в том числе и перед первым. while так же называют оператором предусловия.
Приведем пример цикла, который не выполнится ни разу:
int i =10;
while(i < 5){
System.out.println("i= " + i);
i++;
}
Для реализации бесконечного цикла, в качестве параметра достаточно указать true
while(
true
) { //тело цикла }
Цикл do-while в Java.
В отличие от оператора while, do-while является оператором постусловия, который сначала выполняет тело цикла, а потом осуществляет проверку условия. Таким образом, тело цикла выполнится всегда хотя бы один раз.
Пример: Вывод на экран значений от 1 до 10.
int i = 1;
do{
System.out.println("i = " + i);
i++;
}
while(i < 11);
Конструкция do — while имеет следующий вид:
do { //тело цикла }while(
логическое_выражение
);
Как видно из конструкции, тело цикла выполняется перед проверкой условия. Впоследствии, тело цикла повторится в случае, если логическое_выражение было истинно. Оператор do-while удобно применять, если некоторые действия необходимо выполнить, по крайней мере, один раз, а их повторение будет зависеть от условия.
Вспомним пример цикла while, который не выполнится ни разу, и перепишем его с помощью оператора do-while
int i =10;
do{
System.out.println("i= " + i);
i++;
}while(
i < 5);
После выполнения цикла, на экран будет выведено значение i= 10.
Досрочный выход из цикла (оператор 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:
- При помощи цикла for вывести на экран нечетные числа от 1 до 99.
- Дано число n при помощи цикла for посчитать факториал n!
- Перепишите программы с использованием цикла while.
- Даны переменные x и n вычислить x^n.
- Вывести 10 первых чисел последовательности 0, -5,-10,-15..
- Переделайте последний пример на break.Необходимо, чтобы заданный символ встречался в строке хотя бы 2 раза.
Первая
Это конечно вариант, но вы намудрили. Проще бы было, если бы цикл начинали с единицы и делали каждый раз скачек на 2
Не понял 4 задание.
^ — это означает, что надо возвести в степень?
Тогда, наверное,должна быть какая то конкретная команда?!
Подскажите пожалуйста!
Да, возведение в степень. Команда есть (точнее метод), можете посмотреть в , но здесь нужно возвести при помощи цикла, урок ведь по циклам )
Проверьте пожалуйста!
Это 4 задание!
промежуточные результаты выдает, нужно только конечный. не учтен случай если степень равна 0
А так правильно?!
http://pastebin.com/JqzLx7fp
Все равно нет. Что такое число в степени n? это умножение числа само на себя n раз. В вашем коде я только вижу x *= 2; а если х не 2 а другое число? Внутри кда это менять будете? Да и то, что значение n вы задаете непосредственно в цикле — не хорошо. В этом случае это не универсальный алгоритм, а решение конкретной задачи по возведению конкретного числа в конкретную степень. Сделайте так: в начале кода заведите переменные n и х. Присвойте им значения, и потом в дальнейшем коде оперируйте только этими переменными, а не конкретными числами. Птом меняйте значения n и x (те, что в начале кода) и смотрите как меняется результат. Обязательное условие, которое должно срабатывать это любое число в степени 0 должно равнятся 1.
Если еще не задолбал, то проверьте это
http://pastebin.com/aYfAR7x6
Надеюсь все правильно понял!
вот теперь правильно, если System.out.println(r); вынесете за цикл for.
1+2+3+4+5+6 упражнение в 6 не совсем уверен что понял задаие
http://pastebin.com/E6aFUSXq Старался писать код разборчиво, спасибо
Добрый день, не запускала, но с виду все выглядит правильно. Единственое не понравилось, что в 5 задании вы задаете прямо i >= -45 а речь в задаче идет о 10 числах. То есть вы сами подсчитали, что последним будет -45, а это должна делать программа. Если в след задаче будет не 10, а 927 чисел, то тоже будете конечный результат подсчитывать?
В задаче 6 имеется ввиду следующее. Например, в строке «Мама мыла раму» буквы м,а встречаются больше 2 раз, а ы,л,р,у по одному разу, поэтому если мы будем искать в ней буквы а или м, то программа выдаст положительный результат (встречается хотя бы 2 раза), а если остальные символы, то отрицательный результат.
Добрый день Мария!Не сочтите за наглость)Скиньте пожалуйста решение второго задания,второй день голову ломаю)
Во втором никак,а вот в третьем удалось вроде посчитать факториал. http://pastebin.com/jeHirwaQ
Можно ли выдать сразу конечный результат, т.е. 5! = 120? если да, то как)
Решил второе http://pastebin.com/mVT3BUPb
но как вывести только конечный результат не понял.
в цикле for уже не надо писать y = y + 1; у вас эта операция заложена в цикле с помощью i++. Там вообще не надо y использовать, а заменить его на i или i в цикле заменить на y. И что означает фигурная скобка после int y = 1; ? там этих фигурных скобок быть не должно
вынести println за цикл. А так все ок, не понимаю, если это вы решили, то в чем сложность с циклом for?
Посмотрите урок 13, в нем есть решение 2 задания. Еще можете комментарии к этому уроку полистать, пару раз здесь выкладывали решение. Решения я обычно не скидываю, но могу подсказать, как нужно решать.
Спасибо большое!Просто я еще не до конца все понимаю,но решения как-то получаются.
наугад чтоли пишите?)) нужно разбираться и понимать что делает каждая конкретная строчка в коде
Понемногу разбираюсь)Дайте подсказаньку к 6 заданию)
Выше над вашими комментариями подбно объясняла что нужно сделать в 6. Код нужно взять, тот, который в уроке перед упражнениями. Его нужно исправить так, чтобы break срабатывал после того, как определенный символ второй раз нашелся в строке.