У випадку програмування, у багатьох випадках доводиться повторювати діяльність (інструкцію) кілька разів. Вони також поширені в реальному житті.

цикли

  • Вставте в таблицю 5 порожніх рядків.
  • Зробіть 3 бутерброди
  • Скиньте 3 кубики (кидаємо один раз, але малюємо 3 числа)
  • Запишіть у 100 разів, щоб я не забув домашнє завдання

Ці повторювані дії однакові, якщо завчасно знати, скільки разів їх потрібно зробити. Звичайно, буває і так, що доводиться щось робити стільки часу, скільки зможете.

  • Очистіть 2 кг яблук
  • Помий це
  • Робіть стільки бутербродів, поки не закінчаться м’ясні нарізки

Ці дії також потрібно повторити кілька разів, але я не знаю скільки разів. Можуть бути і менші яблука, більше яких потрібно очистити від шкірки, але якщо вони більші, з меншої кількості штук вийде 2 кг. Мию посуд, поки є горщик. Я роблю бутерброди, поки мені є що одягнути.

Ці принципи стосуються і програмування. Відповідно до них можна виділити 3 різні типи циклів:

За принципом дії перший відрізняється від інших. У цьому випадку ми заздалегідь знаємо, скільки разів хочемо повторити наші завдання, тоді як у двох останніх випадках кількість повторень умовна. Це насправді робить картинку трохи більш тонкою, оскільки Java дуже гнучка зі своїми циклами, але принципи цього.

Інкрементний цикл

Почнемо з першого, додаткового циклу. Цей тип циклу виглядає так:

Ключове слово for вводить цикл. Потім йде головка циклу, де можна встановити 3 речі:

  1. початкове значення використовуваної змінної циклу
  2. умова роботи, тобто коли починати чергове «коло»
  3. збільшити змінну циклу

Приємне (або просто потворне, але це питання точки зору) полягає в тому, що жодна з цих 3 речей не є обов’язковою. Будь-яке або навіть усе можна опустити, єдине обмеження полягає в тому, що 3 частини розділяються; всі ознаки повинні бути збережені:

Правда, це трохи змінює завдання і включає досі невідому інструкцію, але ми бачимо, що це можливо.

Ну, цикл for, за замовчуванням, використовується для збільшення змінної по черзі для виконання певної дії, доки дозволяє умова, яку ми вказуємо. Це буде зрозуміліше на прикладах:

Порахуйте від 1 до 50 і напишіть цифри на екрані:

Якщо ми подивимось на головку циклу, то побачимо наступне:

  1. змінна циклу починається з 1
  2. ми йдемо, поки не досягнемо 50 років
  3. змінна циклу збільшується по одному

Звичайно, я міг написати це так:

Я переходжу від 0 до 49, але завжди виписую номер один більший.

З інтервалу [1; 50] намалюйте 10 випадкових чисел і запишіть їх:

Вищезазначена головка циклу є дуже сильним завданням типу, і ви можете побачити в ньому основне правило: Почніть i від 0 і йдіть до тих пір, поки воно не буде менше числа, яке ви хочете запустити цикл:

Напишіть 20 парних чисел, починаючи з 2:

Я використовую тут стільки прийомів, що рахую від 1 до 20 (саме стільки цифр мені потрібно), але, помноживши їх на 2, я завжди отримую парне число. Звичайно, якщо я подивлюсь на правило, коли я починаю цикл з 0 і зупиняюся на ліміті-1, я міг би писати так само:

І якщо ви починаєте з 1, вам потрібно 20 непарних?

Віднімання 1 з пар дає непарні. Або починаючи з 0:

Але щоб побачити, наскільки гнучким є цикл for, давайте розглянемо ще одне рішення для пар:

Гаразд, я трохи обдурив. Я знаю, що 40 буде останнім, але я не множу, але зараз збільшую змінну циклу на 2 замість 1. Ось хороший приклад оператора + =.
Одним словом, як сотня, цикл for - це гнучкий та ефективний інструмент, якщо ви заздалегідь знаєте, скільки разів я хочу щось зробити. Але вже зрозуміло, чому це все так різноманітно, адже я можу дати стільки видів рішень однієї і тієї ж проблеми, і кожен вирішує завдання ідеально. Між ними стільки нюансів, що вам зовсім не доводиться з цим боротися на рівні середньої школи, суть в тому: дати правильне рішення.

Передній тестовий цикл - поки

Фронт-енд тестовий цикл зазвичай використовується, коли ми не знаємо заздалегідь, скільки разів слід виконувати повторювані дії. Немає проблем, якщо вам потрібно намалювати 10 чисел з інтервалу. Це завдання типу, що відповідає циклу for. Але що, якщо завдання полягає в тому, щоб намалювати 10 непарних чисел із заданого інтервалу? Тоді, якщо ви випадково отримаєте парне число, його слід ігнорувати. Давайте спочатку побачимо загальну форму циклу while:

Як бачите, тут також є заголовок циклу, який містить умову запуску. З операційної точки зору це означає, що цикл працює (виконує ядро ​​цикла) до тих пір, поки умова відповідає істині. Звичайно, слід подбати про те, щоб умова була дотримана один раз, або про пробіг в ядрі циклу, щоб ми не натрапили на нескінченний цикл. Це означає, що він ніколи не може зупинитися, оскільки або він не зупинений, або умова запуску ніколи не може бути хибною. Найпростіший випадковий цикл:

Потім див. Попередній приклад, намалюйте 10 непарних чисел із заданого інтервалу [1; 100]

Давайте подивимось, що робить ця програма:

  1. нам потрібна змінна, яка підраховуватиме, скільки непарних чисел ми намалювали, оскільки ми не маємо справи з подвійними
  2. Я оголосив змінну з іменем number, де ми зберігаємо поточно намальований номер
  3. умова запуску циклу - малювати, поки не буде 10 непарних чисел
  4. у циклі я малюю число і зберігаю його
  5. після того, як я намалював, я перевіряю, чи не дивно це
  6. якщо це непарно, я друкую номер лотереї і збільшую лічильник на одиницю
  7. якщо це не непарно, то з ядра циклу нічого не виконується, оскільки число неправильне, і знову намагається зробити нічию

Ось ще один хороший приклад циклу переднього тестування. Обчисліть дільник двох цілих чисел. Ні, ми не вирішуємо його, розкладаючи на простий множник, але ми даємо добре програмоване рішення, яке охоплює такий алгоритм, який вже існує:
Менше з двох чисел потрібно віднімати від більшого, поки ці числа не зрівняються. Якщо два числа рівні, це найбільший спільний дільник вихідних чисел. Легко зрозуміти, наскільки непередбачувано, скільки разів слід виконати віднімання, тому насправді ми не можемо використовувати цикл for. (це може бути, але це було б досить обернене рішення)

Тепер давайте подивимося, що робить ця програма:

  1. оголошуємо 2 змінні для розглянутих чисел
  2. цикл із умовою запуску, що віднімання потрібно повторювати до тих пір, поки ці числа не зрівняються
  3. якщо число1 більше, відніміть від нього число2
  4. навпаки, відніміть sam1 від sam2
  5. коли цикл закінчується, будь-яке з двох чисел (оскільки вони рівні) представляє найбільший спільний дільник, який ми виписуємо

Якщо ви помітите, цикл може не запускатися один раз. Що робити, якщо два числа в основному рівні? Я все ще можу роздрукувати будь-яку з них, тобто програма переходить до рядка після циклу і друкує одну з них. Для переднього тестового циклу цикл може не працювати будь-коли.

Цикл випробувань ззаду - виконуйте

Цикл do-while подібний до описаного вище тим, що цей тип циклу також використовується, коли ми заздалегідь не знаємо, скільки разів повинна виконуватися послідовність інструкцій. Однак між ними існує важлива різниця. Побачимо загальну форму, це буде зрозуміло:

Як випливає з назви, тут головка циклу знаходиться ззаду (разом із умовою), а інструкції в ядрі циклу - спереду. Це означає, що ядро ​​циклу все одно запуститься 1 раз, оскільки цей цикл буде виконуватися спочатку, а потім перевірте, чи потрібно це кілька разів! Зазвичай він використовується для завдань, де вам потрібно щось зробити раз і назавжди, але тоді вам потрібно перевірити, чи правильно ви отримали те, що, якщо ні, зробіть це ще раз. Прикладом є розіграш чисел, який підпорядковується певній умові:

Накресліть парне число з інтервалу [10; 50]. Ми все ще вирішуємо це, просто витягуючи жереб із заданого інтервалу, але з цією додатковою умовою ми вже не знаємо, що робити, щоб вирівняти. Тому ми малюємо, щоб отримати число, яке задовольняє умові:

Давайте розглянемо програму частинами:

  • малюємо число
  • якщо число, поділене на 2, не дає 0 залишку (непарного), цикл перезапускається, тобто знову малює один
  • цикл припиняється, коли стан стає хибним (навіть)

Цикл do-while тут хороший, тому що мені точно потрібно намалювати число, щоб побачити, чи потрібно мені повторювати жеребкування. Звичайно, я також можу вказати складну умову. Давайте візьмемо число з заданого інтервалу, яке можна розділити на 2 і 5:

Тут, як умова запуску для циклу, ви можете побачити складну умову у виділеному рядку, яка може бути не такою чіткою, як з’являється спочатку. Цикл працює, якщо умова відповідає дійсності. Але тут ми спочатку маємо дві часткові умови, нам потрібно число, що ділиться на 2 і 5. Більше не годиться мати або не, або не мати обох під-умов помилковими. Так, але як умова для циклу ми не повинні давати нам потрібне число, а прямо протилежне. Ви повинні вказати, який номер нам не підходить! Давайте подивимося крок за кроком:

  • редагувати умову, яка нам підходить (що може бути складною умовою)
  • ми заперечуємо все це

Звичайно, тут також вірно, що якщо ми хочемо, ми можемо спростити складний стан тим способом, яким ми вже навчилися:

Тоді який цикл вибрати?

Який досвід ми обираємо для вирішення завдання в довгостроковій перспективі, розповість наш досвід. Особливість програмування, як я вже згадував раніше, полягає в тому, що одне і те ж завдання може бути вирішено правильно різними способами. Практично всі завдання можна вирішити за всі три цикли, іноді між ними є справді нюансні відмінності. Тим не менше, основний момент дається:

  • Якщо я знаю, скільки разів запускати цикл, це для циклу.
  • Якщо я не знаю, скільки разів буде виконуватися цикл І, можливо, його не потрібно буде запускати один раз, тоді цикл while.
  • Якщо я не знаю, скільки разів запускати цикл І раз мені це абсолютно потрібно, тоді виконайте цикл виконуваної роботи.

Зупинимось на одному з попередніх прикладів, коли ми шукали найбільший спільний дільник. Якщо ви пам’ятаєте, відніміть менше від більшого числа, поки ці два числа не зрівняються. Який цикл слід використовувати для розв’язання?

  • Оскільки ми не знаємо, скільки віднімань нам потрібно, тож і для циклів.
  • Можливо, два числа однакові на початку, вам не потрібно віднімати більше від меншого, тому це не повинно бути до-до (оскільки одне запускається безумовно один раз).
  • Тобто цикл while залишився.

Якщо, скажімо, я знаю, що цикл потрібно запускати 10 разів, тому що потрібно намалювати 10 чисел, то віддайте себе за цикл, оскільки це полегшує управління лічильником.

На своєму досвіді я кажу, що, можливо, цикл do-while є найрідкіснішим, а цикл for є найпоширенішим у програмуванні. Ми також використовуємо цикл for частіше через масиви, це ви побачите на наступному уроці.

Наступний урок: Масиви

Думка, коментар? Вийдіть із відповіді

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляти дані публікацій .