Нескінченний for (java) цикл
У Java, як і практично в будь-якій мові програмування, є інструменти для забезпечення багаторазового повторення певного фрагмента коду, або, як їх прийнято називати, циклів. Цикли в Java представлені такими операторами, як for і while, а також їх різновидами. Як правило, цикли використовуються для проходу по одновимірним та багатовимірним масивам та ітеріруемим структурам даних (в т.ч. колекціям) з метою знаходження певних елементів і подальших операцій з ними. Однак це не єдиний спосіб застосування такого інструменту, як цикл Java. Приклади використання будуть проводитись по мірі їх розгляду.
цикл while Java: опис і приклади
Основоположним оператором циклу в Java є while. Фрагмент коду, укладений в його тілі, буде повторюватися до тих пір, поки умова вираження, укладеного в дужки після нього, буде задовольняти логічного значення істинності. Загальна форма оператора while має наступний вигляд:
while (умова) {
// Тіло циклу
}
Як тільки значення логічного умови перестане бути істинним, укладений в тіло циклу код перестане виконуватися і управління передасться йде відразу після нього рядку. Якщо в тілі циклу укладено всього один оператор, то фігурні дужки можна не ставити, проте вважається хорошим тоном, якщо вони стоять завжди. На малюнку вище представлена блок-схема роботи даного оператора.
Відео: Основи Java. Урок 15: Цикли і оператори розгалуження
Для наочності давайте розберемо приклад, представлений на малюнку нижче:
Відео: Java для початківців. Урок 5: Цикл for
Оголошена змінна count спочатку має значення 1. Далі ми бачимо логічне вираз, укладену в дужки після назви оператора. Воно буде істинним, тобто повертати значення true, до тих пір, поки значення змінної count буде менше або дорівнює 10. У тілі циклу з кожним проходом (итерацией) значення змінної збільшується на 1 і виводиться на консольний екран. Зверніть увагу на те, що коли значення змінної досягло 11, цикл припинив роботу.
Якби значення змінної count спочатку дорівнювало 11, то умова циклу було б помилковим, і програма навіть не зайшла б у його тіло.
Варто відзначити, що синтаксис Java дозволяє використовувати оператор while без тіла. Наведемо приклад. Припустимо, у нас є дві змінні i = 100 і j = 200, перед нами стоїть завдання програмно обчислити їх середнє арифметичне - для цього можна використовувати «порожнистий» while:
while (++ i lt; --j);
В результаті значення будь-який з двох змінних буде дорівнює середньому їх початкових значень. Як бачите, цикл прекрасно відпрацював без тіла і виконав всі необхідні дії в умовному вираженні.
Цикл do-while
У попередніх прикладах якщо умовний вираз спочатку повертало значення false, то виконання програми проігнорувало б тіло циклу і пішло далі. Однак часто виникають ситуації, в яких виконання коду, що міститься в тілі циклу, обов`язково хоча б один раз незалежно від істинності умовного виразу. Іншими словами буває так, що перевіряти істинність умовного виразу потрібно не на початку, а в кінці циклу. Таку функціональність може забезпечити різновид циклу while під назвою do-while. Він має наступну форму:
do {
// Тіло циклу
} While (умова);
Як ми бачимо, спочатку на виконання йде тіло циклу, і лише потім перевіряється істинність умови - і так кожну ітерацію.
Код, наведений вище, відпрацює приблизно так само, як у випадку зі звичайним while. Однак якби ми присвоїли змінної count значення 11, тіло циклу все одно виповнилося б один раз, перед тим як оператор зміг перевірити істинність виразу.
Опис і приклади for - Java цикл
цикл for являє собою універсальну і ефективну мовну форму в 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 lt; j- ++ i, --j) {}
При кожній ітерації значення змінної i буде збільшуватися на 1, а значення змінної j зменшуватися на 1 Ітерації будуть виконуватися до тих пір, поки i не стане більше або дорівнює j.
Особливості застосування оператора for
Цикл for є досить гнучку конструкцію, оскільки всі три його частини (ініціалізацію, умова і інкремент / декремент) можна використовувати не за прямим призначенням. Наприклад, замість умовного виразу з керуючоїзмінної можна підставити будь-яку логічну змінну.
boolean exit = false;
for (int i = 0! exit- ++ i) {
exit = true;
}
На прикладі вище ми можемо спостерігати, як робота циклу абсолютно не залежить від керуючої змінної i і кількість ітерацій залежить виключно від того, в який момент змінна exit прийме значення true. Більш того керуючу змінну можна і зовсім прибрати з циклу і це ніяк не відіб`ється на його роботі: for (-! Exit-) {}. Хоча це і не самий розумний спосіб програмування, іноді це може бути корисним. Головне - передбачити ситуацію, в якій змінна прийме потрібне для виходу з циклу значення, щоб не перетворити його в нескінченний.
For Java цикл може бути оголошений і таким способом: for (- -) {}. Це типовий приклад нескінченного циклу з особливими умовами переривання. Про те, яким же чином переривати такого роду цикли, ми поговоримо трохи пізніше.
Цикл в стилі for each
Цикл foreach Java завжди застосовується для послідовного перебору елементів масиву або будь-якої структури даних і виконання над ними певних повторюваних операцій. Приклад даної форми оператора for представлений нижче:
Як итерационной змінної оголошується name, а оголошений раніше масив рядків names виступає другим аргументом оператора. Мінлива name буде по черзі приймати значення кожного елемента масиву, поки всі його елементи не будуть витягнуті. Слід зазначити, що тип змінної повинен бути сумісним з типом елементів, які зберігаються в масиві. Також змінна name доступна виключно для читання і спроба її зміни не призведе до зміни самого елемента в масиві.
Оператори переривання циклу
Існує три оператора переривання циклу: break, return і continue. Перші два здатні повністю перервати роботу циклу, а continue перериває лише роботу поточної ітерації. Якщо ви використовуєте в своєму коді навмисне нескінченний цикл Java, дані оператори обов`язково повинні в ньому бути присутнім. Розглянемо простий приклад використання break:
Відео: Уроки Java - №13 Цикли
Хоча в даному операторі 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 відповідно. Для кращого розуміння рекомендуємо виконати вправи із застосуванням даних операторів в різних формах, а також різних способів їх переривання і переходу з одного блоку в інший.