Новини високих технологій
» » Нескінченний for (Java) цикл

Нескінченний for (Java) цикл

30-11-2016, 10:38
2 753
В Java, як і практично в будь-якій мові програмування, є інструменти для забезпечення багаторазового повторення певного фрагмента коду, або, як їх прийнято називати, циклів. Цикли в Java представлені такими операторами, як for і while, а також їх різновидами. Як правило, цикли використовуються для проходу по одновимірним і багатовимірних масивів і итерируемим структур даних (у т. ч. колекцій) з метою знаходження певних елементів і подальших операцій з ними. Однак це не єдиний спосіб застосування такого інструменту, як цикл Java. Приклади використання будуть приводитися у міру їх розгляду.


Цикл while Java: опис і приклади

Основним оператором циклу в Java є while. Фрагмент коду, укладений в його тілі, буде повторюватися до тих пір, поки умова вирази, укладеного в дужки після нього, буде задовольняти логічного значення істинності. Загальна форма оператора while має наступний вигляд: while(умова) { //тіло циклу } Як тільки значення логічної умови перестане бути істинним, укладений в тіло циклу код перестане виконуватися і управління передасться йде відразу після нього рядку.
Нескінченний for (Java) цикл
Якщо в тілі циклу укладено всього один оператор, то фігурні дужки можна не ставити, проте вважається хорошим тоном, якщо вони стоять завжди. На малюнку вище представлена блок-схема роботи даного оператора. Для наочності давайте розберемо приклад, представлений на малюнку нижче:
Оголошена змінна 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. До п'ятої версії 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) { 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:
Хоча в даному операторі 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 відповідно. Для кращого розуміння рекомендуємо виконати вправи із застосуванням даних операторів в різних формах, а також різних способів їх переривання і переходу з одного блоку в інший.
Цікаво по темі
Програма для створення сайту російською мовою: огляд декількох продуктів
Програма для створення сайту російською мовою: огляд декількох продуктів
Бажання створити свій сайт виникає майже у будь-якого користувача Всесвітньої мережі. Хто-то для цих цілей вивчає мови html, css, js. А хтось йде
Java Узагальнення: опис і методи
Java Узагальнення: опис і методи
Узагальнені типи або узагальнення в Java представляють собою потужний інструмент уніфікації коду та забезпечення безпеки типів даних. У даній статті
JavaScript цикли: for, while, do-while
JavaScript цикли: for, while, do-while
Фундаментальні конструкції будь-якої мови - цикли. Але якщо оператор присвоювання поки ще не викликає сумнівів у доцільності, то далеко не всякий
Java: InputStream. Потоки введення
Java: InputStream. Потоки введення
У даній статті ми розглянемо базовий клас для потоків вводу даних в Java - InputStream. Розберемо основну його функціональність і реалізації, які
MySQL select select from: оператор вибірки
MySQL select select from: оператор вибірки
MySQL - одна з найпопулярніших систем управління базами даних (СУБД). У даній статті ми розглянемо базову функціональність оператора вибірки SELECT,
Перетворення типів. Функції Round і Trunc в "Паскаль"
Перетворення типів. Функції Round і Trunc в "Паскаль"
Перетворення типів в Pascal дозволяє реалізувати більш широкий клас задач та виконувати операції над величинами різних типів.