sonyps4.ru

While true java бесконечный цикл. Бесконечный for (Java) цикл

12.08.17 1.9K

Цикл Java While Do – это инструкция, позволяющая запускать один и тот же фрагмент кода несколько раз. Этот цикл можно использовать для повторения действий при соответствии условий.

Цикл While

Цикл while является самым простым для построения на языке Java . Он состоит из ключа while , условия loop , а также тела цикла:

while (condition) { // loop body }

Каждый отдельный запуск тела цикла расценивается как итерация. Перед каждой итерацией производится оценка условий цикла. Его тело исполняется, только если условия цикла по результатам оценки равно true .

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

Пример

int num = 0; while (num < 10) { System.out.println(num); num++; }

Этот пример выводит числа от 0 до 9 . Давайте пошагово пройдёмся по коду. Сначала мы инициализируем переменную num со значением равным 0 . Это будет счётчик цикла. Когда программа доходит до while , производится оценка выполнения условий цикла. В нашем случае 0 < 10 возвращает значение true и исполняется тело цикла. Внутри цикла выводится переменная num , а затем увеличивается на 1 . На этом завершается первая итерация.

После первого «прогона » условие цикла While Java оценивается во второй раз. 1 < 10 по-прежнему возвращает true , после чего запускается следующая итерация цикла. Один и тот же процесс повторяется несколько раз.

Завершающая итерация начинается, когда значение num равняется 9 . Счётчик цикла выводится в последний раз, и значение увеличивается до 10 . На этот раз новая итерация не может быть запущена, так как условие цикла выдаёт значение false . Так как 10 не меньше 10 .

Таким образом, цикл запускается до тех пор, пока условием цикла выполняется. Вооружившись этим знанием, можно создавать более сложные и функциональные циклы. Давайте проведёт итерацию с массивом:

String names = {"Doc", "Dopey", "Bashful", "Grumpy", "Sneezy", "Sleepy", "Happy"}; int index = 0; while (index < names.length) { System.out.println(names); index++; }

Концепция этого примера схожа с предыдущим. Мы инициализируем счётчик цикла и запускаем итерацию по массиву до тех пор, пока выводятся все элементы. В результате, итерация по массивам – довольно распространённый случай, и в Java для этого есть более подходящая конструкция – цикл For .

Цикл do-while

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

do { // loop body } while (condition);

Пример

do-while сначала исполняет тело цикла, а затем оценивает его условия. В зависимости от полученного результата цикл останавливается или запускается следующая итерация. Давайте рассмотрим простую игру «угадай имя »:

Scanner scanner = new Scanner(System.in); String guess; do { System.out.print("Угадай имя: "); guess = scanner.nextLine(); } while (!"Daffy Duck".equals(guess)); System.out.println("Поздравляю! Ты угадал моё имя!");

В этом while Java примере используется Scanner для парсинга ввода из system.ini . Это стандартный канал ввода, который в большинстве случаев взаимодействует с клавиатурой. Проще говоря, мы просто читаем текст, который вводит игрок.

В игре необходимо спросить пользователя хотя бы раз, и делать это до тех пор, пока игрок вводит правильные ответы. Цикл do-while идеально подходит для таких случаев. В теле цикла мы получаем пользовательское значение, а затем проводится проверка правильности ответа. Цикл должен запускаться до тех пор, пока вводимое пользователем значение не становится равным Daffy Duck . Если правильный ответ получен, цикл останавливается, и мы поздравляем игрока с победой.

В завершение

Циклы while true Java позволяют использовать фрагменты кода несколько раз. Сегодня мы познакомились с циклами Java while и do-while . Они похожи тем, что проверяют условия и исполняют тело цикла, если по результатам оценки условия получено значение true . Но при этом у них есть существенное отличие: условие цикла while проверяется до итерации, а условие цикла do-while – по окончании каждой итерации. Это значит, что цикл do-while всегда исполняется как минимум один раз.

Данная публикация представляет собой перевод статьи «Java’s While and Do-While Loops in Five Minutes » , подготовленной дружной командой проекта

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

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

Начнем, пожалуй, с цикла со счетчиком. В 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 имеются инструменты, предназначенные для многократного повторения определенного фрагмента кода. Такие инструменты принято называть циклами. В Java циклы представлены такими операторами, как while и for, а также их разновидностями. Циклы, как правило, используются для прохода по одномерным и многомерным массивам и структурам данных для нахождения определенны элементов и дальнейших операций с ними. Но это далеко не единственный способ применения такого инструмента, как цикл Java. По мере их рассмотрения будут приводиться примеры использования.

Цикл while Java: описание и примеры

While является основополагающим оператором цикла в Java. Заключенный в его теле фрагмент кода будет повторяться до тех пор, пока условие выражения, заключенного в скобки после него, будет удовлетворять истинному значению. Оператор while в общем виде имеет следующий вид: while (условие){//тело цикла}. Как только значение логического условия перестанет быть истинным, код, заключенный в тело цикла, перестанет выполняться. Управление передастся строке, которая идет сразу после него. Если в теле цикла заключен всего один оператор, то можно не ставить фигурные скобки. Однако, среди программистов считается хорошим тоном всегда ставить их. Давайте разберем пример:

Public class whileDemo (

System.out.println (“Printing Numbers from 1 to 10”);

while (count<=10) {

System.out.println(count);

Изначально объявленная переменная 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 цикл

Цикл for является универсальной и эффективной языковой формой в языке Java. Вплоть до пятой версии JavaSDK существовала только одна традиционная форма оператора for. После нее появилась новая – foreach. В этом разделе речь пойдет о традиционной форме оператора. Циклforвjava имеетследующийвид:

for (inti=0; i<10; i++) {//Loop statements to be executed

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

public class ForLoops {

public static void main (String args) {

intend_value =11;

for , исключая ноль. При этом, постарайтесь, чтобы распределение случайных чисел генерируемых программой было равномерных (т. е. в случае выпадения нуля его нельзя просто заменить на какое-то другое число, например, на 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, Алексей Николаевич Костин. Кафедра ТИДМ математического факультета МПГУ.



Загрузка...