<< Podmienkový príkaz a logické výrazy | Obsah | Metódy vracajúce hodnoty - funkcie >>
Cyklus (angl. loop) v programovaní slúži na to aby sme nejaké príkazy vykonávali opakovane. V Jave poznáme 3 tri základné cykly for, while a do-while. Líšia sa spôsobom riadenia toho, koľko krát sa má cyklus vykonať.
Cyklus for sa používa vtedy, keď vieme dopredu počet opakovaní cyklu. Syntax je nasledovná:
Inicializácia sa vykonáva iba raz úplne na začiatku. Inicializácia obsahuje obvykle deklaráciu a inicializáciu riadiacej premennej napr. int i = 0
čím sme si deklarovali premennú i
typu int a priradili sme jej úvodnú hodnotu nula.
Testovanie podmienky cyklenia sa deje PRED každou iteráciou príkazov cyklu. Prikazy cyklu sa vykonajú, ak je podmienka cyklenia splená, v opačnom prípade cyklus ukončí a pokračuje s vykonávaním príkazov pod blokom tohto for cyklu. Podmienka cyklenia obvykle obsahuje nejaký jednoduchý logický výraz, ktorý porovnáva hodnotu riadiacej premennej s nejakou kritickou hodnotou napr. i<5
.
Zmena riadiacej premennej sa vykonáva PO každom iterácii príkazov cyklu. Najčastejšie sa zvyšuje riadiaca premenná o 1 napr. i++
.
Ukážme si jednoduchý cyklus, v ktorom korytnačka nakreslí rovnostranný trojuholník - vykoná dokopy 3 takty cyklu, pričom v každom takte cyklu urobí krok dĺžky 100 a otočí sa o 120 stupňov.
Poďme si rozanalyzovať, čo sa počas behu tejto metódy deje. Budeme sa pozerať na to, v ktorom riadku je práve výpočet a ako vyzerá kresliace plátno (obrázok pod tabuľkou)
riadok | akcia | hodnota v i | popis | stav plátna |
---|---|---|---|---|
1 | i neexistuje | začína sa metóda | (a) | |
2 | int i = 0 | 0 | deklarácia a inicializácia riadiacej premennej i | (a) |
2 | i < 3 | 0 | nula je menšia ako 3 - ideme spraviť takt cyklu | (a) |
3 | turtle.step(100) | 0 | korytnačka sa pohne | (b) |
4 | turtle.turn(-120) | 0 | korytnačka sa otočí | (c) |
2 | i++ | 1 | zvýšime riadiacu premennú o 1 | (c) |
2 | i < 3 | 1 | 1 je menšia ako 3 - ideme spraviť takt cyklu | (c) |
3 | turtle.step(100) | 1 | korytnačka sa pohne | (d) |
4 | turtle.turn(-120) | 1 | korytnačka sa otočí | (e) |
2 | i++ | 2 | zvýšime riadiacu premennú o 1 | (e) |
2 | i < 3 | 2 | 2 je menšie ako 3 - ideme spraviť takt cyklu | (e) |
3 | turtle.step(100) | 2 | korytnačka sa pohne | (f) |
4 | turtle.turn(-120) | 2 | korytnačka sa otočí | (g) |
2 | i++ | 3 | zvýšime riadiacu premennú o 1 | (g) |
2 | i < 3 | 3 | 3 nie je menšie ako 3 - vyskočíme z cyklu, premenná i zaniká | (g) |
6 | i neexistuje | končíme metódu | (g) |
Povedali sme si, že cyklus for sa používa, keď dopredu vieme, koľko krát budeme tento cyklus opakovať. V predchádzajúcom príklade sa cyklus opakoval 3 krát. Analogicky môžeme cyklus vykonať napríklad 27 krát :
Tento cyklus použijeme vtedy, ak vieme napísať nejakú podmienku, za splnenia ktorej chceme aby sa cyklus opakoval. Syntax je nasledovná:
Uveďme si ako príklad novú metódu pre korytnačku, ktorá umožní korytnačke kresliť štvorcovú špirálu.
Tento cyklus teda vykonáva 3 príkazy - posun, otočenie a zmenu dĺžky kroku na 90% predchajúcej dĺžky. Cykus sa skončí, keď dĺžka kroku bude menšia alebo rovná 5. Výsledok tejto metódy je nasledovný:
Možete vidieť, že pri tejto úlohe sa naozaj ťažko odhaduje, koľko bude potrebných taktov cyklu, preto for cyklus nevieme použiť. Počet taktov cyklu je pre nás irelevantný. My sme chceli len to, aby sa korytnačka už netočila, keď už by mala začať kresliť čiaročky menšie ako 5 pixelov.
Príkazy break a continue sa dajú použiť v ľubovoľnom type cyklu.
Príkaz break slúži na okamžité ukončenie cyklu bez ohľadu na to, či je podmienka cyklenia splnená, alebo nie.
Príkaz continue zabezpečí ukončenie daného taktu cyklu teda preskočenie všetkých zvyšných príkazov v cykle a opätovné overovanie podmienky cyklenia a v prípade jej správnosti normálne pokračovanie v ďalších taktoch cyklu. Ak ide o cyklus for, tak ešte pred overením podmienky sa iteruje riadiaca premenná cyklu.
Výpis z tohoto programu je nasledovný:
0 1 ahoj 2 3 ahoj 4 5 ahoj 6 7 koniec
Vidíte, že po každom párnom čísle sa všetko ostatné za continue preskočí, zvýši sa i
o 1 a začína ďalší cyklus. V prípade, že i
je nepárne, príkaz continue sa nevykoná, ale overí sa či i
nie je väčšie ako 5.
Ak i
nie je väčšie ako 5 vykoná sa ešte posledný príkaz v cykle, ktorý vypíše ahoj a cyklus normálne pokračuje v svojom ďalšom takte.
Ak i
je väčšie ako 5, tak sa vykoná príkaz break, celý cyklus skončí a pokračuje sa vo vykonávaní príkazov za cyklom. V tomto prípade sa už vykoná iba príkaz, ktorý vypíše koniec.
Tento cyklus sa od cyklu while líši tým, že podmienku cyklenia testuje PO vykonaní jedného taktu cyklu. Z toho vyplýva, že prvý takt sa spraví vždy a ďalšie iba ak je podmienka cyklenia splnená. Syntax je nasledovná:
<< Podmienkový príkaz a logické výrazy | Obsah | Metódy vracajúce hodnoty - funkcie >>